J'utilise la ligne suivante pour trouver tous les sous-répertoires de la PWD et les 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 find
imprimer le nom de fichier avant d'exécuter la svnadmin verify
commande pour faciliter la journalisation.
J'ai essayé de me faufiler un peu ls
là-dedans, mais je l'ai fait, comment dois-je faire cela (de préférence simplement)?
command-line
bash
scripts
find
Arronique
la source
la source
'%p'
pour'%p\n'
que le nom précède la sortie de vérification sur sa propre ligne.-printf '%p\n'
par le plus simple-print
find -name <a_name> -print -exec command {} \;
Si vous ne voulez pas recurse, il n'y a aucun intérêt à utiliser
find
. C'est beaucoup plus simple de le faire directement dans le shell:Le
for d in */
trouvera tous les répertoires (*/
assure que seuls les répertoires et aucun fichier ne sont trouvés); leecho "$d"
va imprimer le nom du répertoire; lesvnadmin 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.
la source
find
beaucoup référence . Merci d'avoir amélioré mes connaissances!dotglob
etglobstar
en bash, ce qui crée un script plus long et plus compliqué. J'ai tendance à sauvegarder des globs pour des tâches complexes et volumineuses, alors quefind
la syntaxe est plus facile à combiner à la volée en enchaînant simplement un tas de filtres et de commandes dans une seule ligne.find
plus simple. Je préfère toujours les globs,find
car non seulement je les trouve beaucoup plus simples, mais ils sont également plus sûrs lorsqu'il s'agit de noms de fichiers arbitraires transmis à d'autres programmes.J'ai ajouté
-type d
s'il s'agit uniquement de répertoires.la source
{}
, au moins danssvnadmin verify {}
-exec
spawn est-il un shell enfant, dans lequel les 2 commandes sont exécutées, utilisant;
comme fin de ligne?Essaye ça:
Si vous voulez juste des répertoires (Merci à @kos note):
la source
for f in */
ne traitera que les répertoires. -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.
-exec
pour démarrer un shellsh -c
pour lancer des commandes à l'intérieur du shellVotre commande
ou plus court
-prune
si le fichier est un répertoire, n'y descendez pasVotre commande
la source
-prune
semble intéressant. J'avais l'habitude./* -maxdepth 0
d'éviter de revenir.
de la commande find. Cela ne cause aucune erreur critique, mais je préfère ne pas l'avoir dans mes résultats.find
possède des options pour l’impression, déjà mentionnées dans d’autres réponses. Si nous examinons le problème sous la perspective d’exécuter plusieurs commandes pour le même fichier en cours de traitement,find
permet d’utiliser plusieurs-exec
instructions. Cela signifie que nous pourrions choisir d'utiliser:Encore une fois, notez que cette approche est applicable non seulement avec l' impression
echo
,printf
ou d' autres services publics, mais aussi d' autres commandes.la source
Il peut être utile de diriger la
find
sortie vers uneread
boucle: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 cetls
exemple sophistiqué :la source
Ceci imprimera le nom et le contenu des fichiers uniquement de manière récursive.
la source