Ich benutze die folgende Zeile, um alle Unterverzeichnisse des PWD zu finden und svnadmin verify
in jedem Verzeichnis auszuführen (ich weiß bereits, dass es sich um Subversion-Repositorys handelt).
find ./* -maxdepth 0 -exec svnadmin verify {} \;
Dies funktioniert gut, abgesehen davon, dass die Ausgabe folgendermaßen aussieht:
* 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.
Ich möchte find
den Dateinamen unbedingt vor dem Ausführen des svnadmin verify
Befehls ausdrucken , um die Protokollierung zu vereinfachen.
Ich habe versucht, ein wenig ls
hineinzudrücken, habe es aber hochgedrückt. Wie soll ich das tun (am besten einfach)?
command-line
bash
scripts
find
Arronisch
quelle
quelle
'%p'
es'%p\n'
so geändert , dass der Name vor der Verifizierungsausgabe in einer eigenen Zeile steht.-printf '%p\n'
mit dem einfacheren-print
find -name <a_name> -print -exec command {} \;
Wenn Sie nicht wiederkehren möchten, hat die Verwendung keinen Sinn
find
. Es ist viel einfacher, es direkt in der Shell zu tun:Der
for d in */
findet alle Verzeichnisse (der*/
stellt sicher, dass nur Verzeichnisse und keine Dateien gefunden werden); Derecho "$d"
gibt den Namen des Verzeichnisses aus. dassvnadmin verify "$d"
wird das Verzeichnis überprüfen.Dies kann entweder direkt über die Befehlszeile oder innerhalb eines Skripts ohne Änderung des Formats ausgeführt werden.
quelle
find
so wichtig waren . Vielen Dank für die Verbesserung meiner Kenntnisse!dotglob
undglobstar
in bash, wodurch ein längeres, komplizierteres Skript erstellt wird. Ich tendiere dazu, Globs für große, komplizierte Aufgaben zu speichern, währendfind
die Syntax schneller zusammengesetzt werden kann, indem einfach eine Reihe von Filtern und Befehlen zu einem Einzeiler zusammengefasst werden.find
Einfachheit für wichtig hält. Ich bevorzuge immer Globs,find
da ich sie nicht nur viel einfacher finde, sondern sie auch sicherer sind, wenn es um beliebige Dateinamen geht, die an andere Programme übergeben werden.Ich habe hinzugefügt,
-type d
wenn es nur Verzeichnisse sind.quelle
{}
, zumindest insvnadmin verify {}
-exec
eine untergeordnete Shell, in der die beiden Befehle ausgeführt werden und die;
als Zeilenende verwendet werden?Versuche dies:
Wenn du nur Verzeichnisse willst (Danke an @kos note):
quelle
for f in */
wird nur Verzeichnisse verarbeiten. -maxdepth 1
stattdessen./*
nur die erste Ebene in der Ordnerstruktur-type d
Sie nur Ordner! -name "."
Sie, brauchen Sie nicht.
-exec
, um eine Shell zu startensh -c
diese Option , um Befehle in der Shell zu startenDein Befehl
oder kürzer
-prune
diese Option, wenn es sich bei der Datei um ein Verzeichnis handelt, und steigen Sie nicht in dieses Verzeichnis abDein Befehl
quelle
-prune
sieht interessant aus. Früher habe ich es./* -maxdepth 0
vermieden,.
vom Befehl find zurückzukehren. Es verursacht keinen kritischen Fehler, aber ich ziehe es vor, das nicht in meiner Ausgabe zu haben.find
hat Option Flags zum Drucken, die bereits in anderen Antworten erwähnt sind. Wenn wir uns das Problem aus der Perspektive der Ausführung mehrerer Befehle für dieselbe aktuell verarbeitete Datei ansehen,find
können mehrere-exec
Anweisungen verwendet werden. Dies bedeutet, dass wir uns für Folgendes entscheiden könnten:Auch beachten Sie, dass dieser Ansatz anwendbar ist , nicht nur den Druck mit
echo
,printf
oder andere Nebenkosten , sondern auch andere Befehle.quelle
Es kann nützlich sein, die
find
Ausgabe an dieread
Schleife weiterzuleiten:Sie können damit eine kompliziertere, zusammengesetzte Befehlssequenz mit Dateinamen ausführen, die von zurückgegeben werden
find
, wie im folgendenls
Beispiel:quelle
Dadurch werden Name und Inhalt von Dateien nur rekursiv gedruckt.
quelle