59 votes

Comment afficher le nom de fichier dans la commande find tout en utilisant -exec?

Je utilise la ligne suivante pour trouver tous les sous-répertoires du PWD et exécuter svnadmin verify sur chaque répertoire (je sais déjà qu'ils sont des dépôts Subversion)

find ./* -maxdepth 0 -exec svnadmin verify {} \;

Cela fonctionne bien, à part le fait que la sortie ressemble à ceci:

* Vérification des métadonnées du dépôt ...
* Vérification des métadonnées à la révision 1 ...
* Vérification des métadonnées à la révision 2 ...
* Vérification des métadonnées à la révision 4 ...
* Vérification des métadonnées à la révision 5 ...
* Vérification des métadonnées à la révision 6 ...
* Vérification des métadonnées à la révision 9 ...
* Vérification des métadonnées à la révision 10 ...
* Vérification des métadonnées à la révision 12 ...
* Vérification des métadonnées à la révision 14 ...
* Vérification des métadonnées à la révision 15 ...
* Vérification des métadonnées à la révision 18 ...
* Vérification des métadonnées à la révision 20 ...
* Vérification des métadonnées à la révision 22 ...
* Révision 0 vérifiée.
* Révision 1 vérifiée.
* Révision 2 vérifiée.
* Révision 3 vérifiée.
* Révision 4 vérifiée.
* Révision 5 vérifiée.
* Révision 6 vérifiée.
* Révision 7 vérifiée.
* Révision 8 vérifiée.
* Révision 9 vérifiée.
* Révision 10 vérifiée.
* Révision 11 vérifiée.
* Révision 12 vérifiée.
* Révision 13 vérifiée.
* Révision 14 vérifiée.
* Révision 15 vérifiée.
* Révision 16 vérifiée.
* Révision 17 vérifiée.
* Révision 18 vérifiée.
* Révision 19 vérifiée.
* Révision 20 vérifiée.
* Révision 21 vérifiée.
* Révision 22 vérifiée.
* Révision 23 vérifiée.
* Révision 0 vérifiée.
* Vérification des métadonnées du dépôt ...
* Vérification des métadonnées à la révision 4 ...
* Vérification des métadonnées à la révision 5 ...
* Vérification des métadonnées à la révision 6 ...
* Vérification des métadonnées à la révision 7 ...
* Vérification des métadonnées à la révision 9 ...
* Révision 0 vérifiée.
* Révision 1 vérifiée.
* Révision 2 vérifiée.
* Révision 3 vérifiée.
* Révision 4 vérifiée.
* Révision 5 vérifiée.
* Révision 6 vérifiée.
* Révision 7 vérifiée.
* Révision 8 vérifiée.
* Révision 9 vérifiée.

J'aimerais vraiment que find imprime le nom du fichier avant d'exécuter la commande svnadmin verify, pour faciliter la journalisation.

J'ai essayé de glisser un peu de ls là-dedans mais j'ai tout bidouillé, comment devrais-je faire cela (de préférence de manière simple)?

1voto

Sergiy Kolodyazhnyy Points 97292

find a des options pour l'impression, qui sont déjà mentionnées dans d'autres réponses. Si nous regardons le problème sous l'angle de l'exécution de plusieurs commandes pour le même fichier actuellement traité, find permet d'utiliser plusieurs déclarations -exec. Cela signifie que nous pourrions opter pour utiliser :

find ./* -maxdepth 0 -exec echo {} \; -exec svnadmin verify {} \; 

Encore une fois, noter que cette approche est applicable non seulement pour l'impression avec echo, printf, ou d'autres utilitaires, mais aussi pour d'autres commandes.

1voto

Noam Manos Points 279

Meilleur utilisé avec XARGS, car il dispose d'une option verbeuse exactement pour cela:

xargs --verbose / -t
      Affiche la ligne de commande sur la sortie d'erreur standard avant de l'exécuter.

Donc dans votre exemple:

find ./* -maxdepth 0 -type d | xargs -n1 --verbose svnadmin verify

svnadmin verify ./REPO_DIR_A
* Révision vérifiée ...
svnadmin verify ./REPO_DIR_B
* Révision vérifiée ...

0voto

wullxz Points 1057

Il peut être utile de rediriger la sortie de find vers une boucle read :

find . | while read d; do echo "=== ${d}: ==="; svnadmin verify ${d}; done

Cela vous permet d'exécuter une séquence de commandes plus compliquée et composée avec les noms de fichiers renvoyés par find, comme dans cet exemple élégant de ls :

find . | while read f; do echo ${f} | figlet -k; done

0voto

Prashant Adlinge Points 415

Cela affichera le nom et le contenu des fichiers uniquement de manière récursive.

find . -type f -printf '\n\n%p:\n' -exec cat {} \;

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X