J'utilise la ligne suivante pour trouver tous les sous-répertoires de la PWD et exécuter svnadmin verify
sur chaque répertoire (je sais déjà qu'il s'agit de référentiels Subversion)
find ./* -maxdepth 0 -exec svnadmin verify {} \;
Cela fonctionne bien, à part le fait que la sortie ressemble à ceci:
* Verifying repository metadata ...
* Verifying metadata at revision 1 ...
* Verifying metadata at revision 2 ...
* Verifying metadata at revision 4 ...
* Verifying metadata at revision 5 ...
* Verifying metadata at revision 6 ...
* Verifying metadata at revision 9 ...
* Verifying metadata at revision 10 ...
* Verifying metadata at revision 12 ...
* Verifying metadata at revision 14 ...
* Verifying metadata at revision 15 ...
* Verifying metadata at revision 18 ...
* Verifying metadata at revision 20 ...
* Verifying metadata at revision 22 ...
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.
* Verified revision 3.
* Verified revision 4.
* Verified revision 5.
* Verified revision 6.
* Verified revision 7.
* Verified revision 8.
* Verified revision 9.
* Verified revision 10.
* Verified revision 11.
* Verified revision 12.
* Verified revision 13.
* Verified revision 14.
* Verified revision 15.
* Verified revision 16.
* Verified revision 17.
* Verified revision 18.
* Verified revision 19.
* Verified revision 20.
* Verified revision 21.
* Verified revision 22.
* Verified revision 23.
* Verified revision 0.
* Verifying repository metadata ...
* Verifying metadata at revision 4 ...
* Verifying metadata at revision 5 ...
* Verifying metadata at revision 6 ...
* Verifying metadata at revision 7 ...
* Verifying metadata at revision 9 ...
* Verified revision 0.
* Verified revision 1.
* Verified revision 2.
* Verified revision 3.
* Verified revision 4.
* Verified revision 5.
* Verified revision 6.
* Verified revision 7.
* Verified revision 8.
* Verified revision 9.
J'aimerais vraiment que find
imprime le nom du fichier avant d'exécuter la commande svnadmin verify
afin de faciliter la journalisation.
J'ai essayé d'insérer un petit nom ls
dedans, mais je l'ai fait, comment dois-je faire cela (de préférence simplement)?
ajoutez simplement une option -printf
avant
find -printf '%p' -exec command \;
Si vous ne voulez pas recurse, utiliser find
ne sert à rien. Il est beaucoup plus simple de le faire directement dans Shell:
for d in */; do echo "$d"; svnadmin verify "$d"; done
Le for d in */
trouvera tous les répertoires (le */
garantit que seuls les répertoires et aucun fichier ne sont trouvés); le echo "$d"
imprimera 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.
find ./* -maxdepth 0 -type d -exec bash -c 'echo "{}"; svnadmin verify "{}"' \;
J'ai ajouté -type d
s'il ne s'agit que de répertoires.
Essaye ça:
for f in * ; do echo -n "${f}:"; svnadmin verify "${f}"; done
Si vous ne voulez que des répertoires (Merci à @kos note):
for f in */ ; do echo -n "${f}:"; svnadmin verify "${f}"; done
. -maxdepth 1
au lieu de ./*
, vous n'avez besoin que du premier niveau de la structure de dossiers.-type d
, vous n'avez besoin que de dossiers! -name "."
, vous n'avez pas besoin de .
-exec
pour démarrer un shellsh -c
pour lancer des commandes dans le shellVotre commande
find . -maxdepth 1 -type d ! -name "." -exec sh -c 'echo "{}"; svnadmin verify "{}"' \;
ou plus court
-Prune
si le fichier est un répertoire, n'y descendez pasVotre commande
find . -mindepth 1 -Prune -exec sh -c 'echo "{}"; svnadmin verify "{}"' \;
find
a des options pour l’impression, qui sont déjà mentionnées dans d’autres réponses. Si nous examinons le problème du point de vue de l’exécution de plusieurs commandes pour le même fichier en cours de traitement, find
permet d’utiliser plusieurs instructions -exec
. Cela signifie que nous pourrions choisir d'utiliser:
find ./* -maxdepth 0 -exec echo {} \; -exec svnadmin verify {} \;
Encore une fois, notez que cette approche est applicable non seulement à l’impression avec echo
, printf
ou d’autres utilitaires, mais également à d’autres commandes.
Il peut être utile de diriger le résultat find
vers la boucle read
:
find . | while read d; do echo "=== ${d}: ==="; svnadmin verify ${d}; done
Il vous permet d'exécuter une séquence de commandes composée plus complexe avec les noms de fichiers renvoyés par find
, comme dans cet exemple sophistiqué ls
:
find . | while read f; do echo ${f} | figlet -k; done