Kombination find und xargs

Das folgende Konstrukt funktioniert mit den GNU Versionen von xargs, mv und find, so wie es die meisten Linuxdistributionen mitbringen.

Manchmal hat man über mehrere Verzeichnisse verteilt gleichartige Dateien, die man in einen gemeinsamen Ordner bringen möchte. Händisch geht das natürlich, das kann aber auch unübersichtlich werden. Eine geschickte Verkettung von  vorhandenen Kommandos erleichtert dem Anwender dabei das Leben.

find . -name "*.mobi" -print0 | xargs -r0 mv -t ~/tmp/

Das find-Kommando sucht die Dateien mit dem genannten Muster ab dem aktuellen Verzeichnis.

Das xargs-Kommando führt dann für jede gefundene Datei den mv-Befehl aus. Hier wird über die -t Option ein GNU-spezifisches Feature aktiviert, bei dem immer zuserst das Zielverzeichnis angegeben wird. Die zusätzlichen Optionen bei find und xargs  sorgen für korrektes Quoting der Dateinamen, wenn Leer- und Sonderzeichen enthalten sind.

Ein praktisches Beispiel sähe wie folgt aus:

Find ergibt folgendes Resultat:

./a/a.mobi
./b/b.mobi

xargs führt folgende Kommandozeilen aus:

mv -t ~/tmp/ ./a/a.mobi
mv -t ~/tmp/ ./b/b.mobi