Drucken und Aktualisieren der Variable in „Find“

Drucken und Aktualisieren der Variable in „Find“

Ich möchte einen findBefehl 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 findsind unabhängig. Jeder -execstartet 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

verwandte Informationen