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 xargs
kö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 5
begrenzt , 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 XX
XX
xargs
druckt die Aufrufe aus, tar
während diese ausgeführt werden. Entfernen Sie die Option -t
, um dies auszuschalten.
Die Verzeichnispfadnamen werden von find
with übergeben -print0
und von xargs
with 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.