Find: Exécuter des commandes sur les fichiers et formater l'affichage

Find: Exécuter des commandes sur les fichiers et formater l'affichage

By ronan, 13 février, 2025

Dans l'exemple suivant, je vais rechercher tous les fichiers dans un dossier, exécuter la commande xxh64sum et afficher un tableau de 3 colonnes contenant le nom court du fichier, la valeur du xxh64sum et enfin, le nom complet du fichier (chemin compris).

Le résultat final sera affiché à l'écran et sauvegardé dans un fichier.

$ sudo find /var/log/nginx/ -type f -printf '%p %f\n' | while read -r x y; do xxh64=$(sudo xxh64sum "$x") ; printf "%-45s %-s\n" "$y" "$xxh64"; done | sort | tee /tmpfs/result

En détail:

On recherche tous les fichiers du dossier et on affiche le nom complet du fichier (chemin compris %p) et le nom court (%f)

find /var/log/nginx/ -type f -printf '%p %f\n'

Tant qu'il y a des enregistrements retournés par la commande précédente (boucle while), on lit chaque ligne en affectant chaque élément (le nom complet du fichier et le nom court) à la variable x et y (read -r x y). 
Lien vers l'article read
Le calcul de la somme de contrôle xxh64 est exécuté sur le nom complet du fichier (xxh64sum $x).
Le résultat est affiché grâce à la commande printf
On affiche en premier le nom court du fichier puis le résultat du hash qui contient le hash et le nom complet du fichier.

while read -r x y; do xxh64=$(sudo xxh64sum "$x") ; printf "%-45s %-s\n" "$y" "$xxh64"; done

Le résultat est affiché à l'écran et sauvegardé dans un fichier (et trié).

sort | tee /tmpfs/result

Le résultat final:

access.log-20250204.gz                        54c1315ad46e078e  /var/log/nginx/access.log-20250204.gz
access.log-20250205.gz                        1020da7a66e84c2e  /var/log/nginx/access.log-20250205.gz
access.log-20250206.gz                        3ff0cf42b19bbef8  /var/log/nginx/access.log-20250206.gz
access.log-20250207.gz                        e99c510ae86f4661  /var/log/nginx/access.log-20250207.gz
access.log-20250208.gz                        f7868465f7071e87  /var/log/nginx/access.log-20250208.gz
access.log-20250209.gz                        15b776894f620c85  /var/log/nginx/access.log-20250209.gz
access.log-20250210.gz                        85b3722e1e1c198d  /var/log/nginx/access.log-20250210.gz
access.log-20250211.gz                        b42bb2e5afa75766  /var/log/nginx/access.log-20250211.gz
access.log-20250212.gz                        4317f17985526602  /var/log/nginx/access.log-20250212.gz
access.log-20250213.gz                        739dc6d9afc15060  /var/log/nginx/access.log-20250213.gz
access.log                                    90ecd0288ae898a0  /var/log/nginx/access.log
error.log-20250130.gz                         cdbbcb3a8cbc152b  /var/log/nginx/error.log-20250130.gz
error.log-20250131.gz                         aaec7df137471019  /var/log/nginx/error.log-20250131.gz
error.log-20250201.gz                         146b1bb4ee853137  /var/log/nginx/error.log-20250201.gz
error.log-20250204.gz                         d6e701381046fedb  /var/log/nginx/error.log-20250204.gz
error.log-20250206.gz                         74672169e3144efa  /var/log/nginx/error.log-20250206.gz
error.log-20250207.gz                         92ebe0bf6bc5d022  /var/log/nginx/error.log-20250207.gz
error.log-20250208.gz                         97f540ddcb0086fe  /var/log/nginx/error.log-20250208.gz
error.log-20250211.gz                         7f405c59697f053e  /var/log/nginx/error.log-20250211.gz
error.log-20250212.gz                         b8ae94168abbe021  /var/log/nginx/error.log-20250212.gz
error.log-20250213.gz                         cd37e963401b42fe  /var/log/nginx/error.log-20250213.gz
error.log                                     e7c658673b7028ac  /var/log/nginx/error.log
http_json_echo.log-20240927.gz                d30a3b619014ba2d  /var/log/nginx/http_json_echo.log-20240927.gz
http_json_echo.log-20241029.gz                02e2db0f9bf951a1  /var/log/nginx/http_json_echo.log-20241029.gz
http_json_echo.log                            ef46db3751d8e999  /var/log/nginx/http_json_echo.log