
Ich möchte einen find
Befehl ausführen und die zurückgegebenen Dateien verarbeiten, dabei aber auch die Anzahl der verarbeiteten Dateien anzeigen, um mir einen Überblick über den Fortschritt zu verschaffen.
Im Moment lautet mein Befehl (als Beispiel):
COUNT=0\; find . -name '*.*' -exec echo "$COUNT: \c" \; -exec echo {} \;
Aber als Ergebnis bekomme ich die Anzahl nicht angezeigt (und ich kann nicht herausfinden, wie ich sie erhöhen kann). Ich hätte gerne etwas wie:
0: ./FileOne.txt
1: ./FileTwo.txt
...
205: ./FileTwoHundredAndFive.txt
Antwort1
Die von ausgeführten Befehle find
sind unabhängig. Jeder -exec
startet einen neuen Befehl. Es gibt keine Möglichkeit, den aktuellen Zählerstand von einem Befehl auf den nächsten zu übertragen, außer ihn irgendwo (in einer Datei) zu speichern, was sehr langsam wäre.
Sie können „find“ so einstellen, dass es jedes Mal etwas ausgibt, wenn es eine Datei erkennt, und die Ausgabe an ein Programm weiterleitet, das die Eingabezeilen zählt.
find … -print -exec 'the stuff you want to do' | nl
Dadurch werden die Zählungen nach einer Verzögerung aufgrund der Pufferung gedruckt. SiehePufferung in der Pipe deaktivierenzum Ausschalten der Pufferung.
stdbuf -oL -eL find … -print -exec 'the stuff you want to do' | nl