Fortgeschrittene Verwendung von xargs mit Optionen
In diesem letzten Schritt werden wir einige fortgeschrittene Optionen von xargs
untersuchen, die es für komplexe Aufgaben noch leistungsfähiger machen.
Verwenden von xargs mit begrenzter Parallelität
Die Option -P
ermöglicht es Ihnen, mehrere Prozesse parallel auszuführen, was die Verarbeitung vieler Dateien erheblich beschleunigen kann:
mkdir -p ~/project/data/processing
touch ~/project/data/processing/large_file_{1..20}.dat
Simulieren wir die Verarbeitung dieser Dateien mit einem sleep
-Befehl, um die Parallelität zu demonstrieren:
ls ~/project/data/processing/*.dat | xargs -P 4 -I {} sh -c 'echo "Processing {}..."; sleep 1; echo "Finished {}"'
In diesem Befehl:
-P 4
teilt xargs
mit, bis zu 4 Prozesse parallel auszuführen
- Jeder Prozess dauert 1 Sekunde (der
sleep
-Befehl)
- Ohne Parallelität würde die Verarbeitung von 20 Dateien mindestens 20 Sekunden dauern
- Mit 4 parallelen Prozessen sollte es in etwa 5 Sekunden abgeschlossen sein
Begrenzen der Anzahl der Argumente mit -n
Die Option -n
begrenzt die Anzahl der an jeden Befehlsaufruf übergebenen Argumente:
echo {1..10} | xargs -n 2 echo "Processing batch:"
Dies wird folgende Ausgabe erzeugen:
Processing batch: 1 2
Processing batch: 3 4
Processing batch: 5 6
Processing batch: 7 8
Processing batch: 9 10
Jeder Aufruf von echo
erhält genau 2 Argumente.
Abfrage vor der Ausführung mit -p
Die Option -p
fordert den Benutzer vor der Ausführung jedes Befehls auf:
echo file1 file2 file3 | xargs -p rm
Dies wird folgendes anzeigen:
rm file1 file2 file3 ?
Sie müssen 'y' eingeben und Enter drücken, um den Befehl auszuführen, oder 'n', um ihn zu überspringen. Dies kann für potenziell zerstörerische Operationen nützlich sein.
Hinweis: In dieser Lab-Umgebung müssen Sie möglicherweise Ctrl+C drücken, um den Befehl abzubrechen, anstatt 'n' einzugeben.
Umgang mit leerer Eingabe mit -r
Die Option -r
(auch bekannt als --no-run-if-empty
) verhindert, dass xargs
den Befehl ausführt, wenn keine Eingabe vorhanden ist:
## This will try to execute 'echo' even with no input
echo "" | xargs echo "Output:"
## This will not execute 'echo' when there's no input
echo "" | xargs -r echo "Output:"
Der erste Befehl wird "Output:" ausgeben, auch wenn keine echte Eingabe vorhanden ist, während der zweite Befehl den echo
-Befehl überhaupt nicht ausführt.
Erstellen eines praktischen Beispiels: Dateisicherungs-Skript
Kombinieren wir das, was wir gelernt haben, um ein praktisches Beispiel zu erstellen - ein Skript, das alle Konfigurationsdateien findet und sichert:
cat > backup_configs.sh << EOF
#!/bin/bash
## Create a backup directory with timestamp
BACKUP_DIR=~/project/data/backups/\$(date +%Y%m%d_%H%M%S)
mkdir -p \$BACKUP_DIR
## Find all config files and copy them to the backup directory
find ~/project/data/config -name "*.conf" -print0 | xargs -0 -I {} cp {} \$BACKUP_DIR/
## Show what was backed up
echo "Backed up the following files to \$BACKUP_DIR:"
ls -l \$BACKUP_DIR
EOF
chmod +x backup_configs.sh
Führen Sie nun das Sicherungsskript aus:
./backup_configs.sh
Dieses Skript:
- Erstellt ein Sicherungsverzeichnis mit einem Zeitstempel
- Findet alle
.conf
-Dateien im Konfigurationsverzeichnis
- Kopiert sie in das Sicherungsverzeichnis
- Listet die gesicherten Dateien auf
Die Ausgabe zeigt das erstellte Sicherungsverzeichnis und die gesicherten Dateien.