Verwenden Sie Dateien aus dem Suchbefehl in parallelen Stapeln

Verwenden Sie Dateien aus dem Suchbefehl in parallelen Stapeln

Ich habe diesen Code, um nach Verzeichnissen im aktuellen Ordner zu suchen und sie dann zu tarnen

find . -type d -maxdepth 1 -mindepth 1 -print -exec tar czf {}.tar.gz {} \;

Ich habe Hunderte von Ordnern und derzeit wird einer nach dem anderen bearbeitet.

Ist es möglich, dass ich in Batches von 5 parallel laufen kann?

Antwort1

Durch die Verwendung xargskönnen Sie einen gewissen Grad an Parallelität erreichen:

find . -type d -maxdepth 1 -mindepth 1 -print0 |
xargs -t0 -n 1 -P 5 -I XX tar czf XX.tar.gz XX

Mit diesem Flag wird die Anzahl paralleler Prozesse auf fünf -P 5begrenzt , während es verwendet wird, um das Dienstprogramm nur mit einer Eingabezeile gleichzeitig auszuführen. Mit geben wir an, dass die Eingabezeile, die ein Verzeichnispfad sein wird, durch die Zeichenfolge im Befehl ersetzt werden soll.xargs-n 1-I XXXX

xargsdruckt die Aufrufe aus, tarwährend diese ausgeführt werden. Entfernen Sie die Option -t, um dies auszuschalten.

Die Verzeichnispfadnamen werden von findwith übergeben -print0und von xargswith empfangen -0(d. h. als Trennzeichen verwendet \0), um möglicherweise exotische Namen zu ermöglichen.


Wie erwähntin einer Antwort an anderer Stelle auf dieser Site:

Beachten Sie, dass der Engpass des Vorgangs wahrscheinlich die Festplatte ist. Aus diesem Grund würde der Vorgang auch dann nicht schneller ablaufen, wenn Sie ihn auf zwei oder mehr Prozesse aufteilen würden, es sei denn, diese arbeiten auf unterschiedlichen Laufwerken.

verwandte Informationen