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)?

63voto

FelixJN Points 2118

Il suffit d'ajouter une option -printf before

find -printf '%p' -exec command \;

15voto

Stewart Points 1385

Si vous ne voulez pas faire de récursion, il n'y a pas de sens à utiliser find. Il est beaucoup plus simple de le faire directement dans le shell :

for d in */; do echo "$d"; svnadmin verify "$d"; done

Le for d in */ trouvera tous les répertoires (le */ assure que seuls les répertoires et pas les fichiers sont trouvés); le echo "$d" affichera le nom du répertoire; le svnadmin verify "$d" vérifiera le répertoire.

Cela peut être exécuté directement à partir de la ligne de commande ou à l'intérieur d'un script sans changement de format.

8voto

Ryan Points 21
trouver ./* -maxdepth 0 -type d -exec bash -c 'echo "{}"; svnadmin verify "{}"' \;

J'ai ajouté -type d s'il s'agit uniquement de répertoires.

6voto

Maythux Points 77506

Essayez ceci :

for f in * ; do echo  -n "${f}:"; svnadmin verify "${f}"; done

Si vous voulez seulement les répertoires (Merci à @kos note) :

for f in */ ; do echo  -n "${f}:"; svnadmin verify "${f}"; done

3voto

A.B. Points 84870
  • Utilisez . -maxdepth 1 au lieu de ./*, vous avez seulement besoin du premier niveau dans la structure du dossier
  • Utilisez -type d, vous avez seulement besoin des dossiers
  • Utilisez ! -name ".", vous n'avez pas besoin de .
  • Utilisez -exec pour démarrer un shell
  • Utilisez sh -c pour démarrer des commandes à l'intérieur du shell

Votre commande

find . -maxdepth 1 -type d ! -name "." -exec sh -c 'echo "{}"; svnadmin verify "{}"' \;

ou plus court

  • Utilisez -prune si le fichier est un répertoire, ne descendez pas dedans

Votre commande

find . -mindepth 1 -prune -exec sh -c 'echo "{}"; svnadmin verify "{}"' \;

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