Sie haben eine Liste von Dateien und können diese mit einem Befehl verschieben.

Sie haben eine Liste von Dateien und können diese mit einem Befehl verschieben.

Ich habe einen Befehl ausgeführt, der anhand bestimmter Suchkriterien viele Dateien findet. Er gibt die Dateien folgendermaßen zurück:

./somepath/somepath/file.something
./asdf/asdf/s.php
./etc/a.php
./a/b/c/d/e/f/g.jpg

Daher habe ich mich gefragt: Wenn ich diese Ausgabe in einer Datei erfasse (also eine Datei pro Zeile), kann mir dann jemand helfen, einen Befehl zu schreiben, der die Datei durchläuft und die Dateien einzeln in ein angegebenes Verzeichnis verschiebt?

Vielen Dank im Voraus.

Antwort1

while read -r filename
  do
  mv -- "$filename" directory
done < list_of_files.txt

Nicht getestet (ich verwende einen Arbeits-PC mit Windows), sollte aber funktionieren.

Antwort2

your_command | xargs -I% mv "%" dest_dir

Wenn Ihr Befehl lautet findoder Sie die Dateinamen auf eine andere Weise mit Null beenden können:

your_command | xargs -0 -I% mv "%" dest_dir

oder

find [find-args] -print0 | xargs -0 -I% mv "%" dest_dir

Die Verwendung von Nullen zum Beenden von Dateinamen ermöglicht die Arbeit mit Dateinamen, die Leerzeichen, Zeilenumbrüche usw. enthalten können.

Sie können xargsIhre Datei auch folgendermaßen verarbeiten:

xargs -a filename -I% mv "%" dest_dir

Antwort3

Eine weitere Möglichkeit, wenn die Dateinamen keine Leerzeichen enthalten, wäre

mv `search_command_here` dest_directory

(Die Backtick-Syntax ist auch ein Bash-ismus, aber in der Frage wird ausdrücklich darauf hingewiesen, dass dies unter Linux geschieht und alle wichtigen Linux-Distributionen standardmäßig Bash verwenden.)

verwandte Informationen