Lösung 1:
Um eine nutzlose Verwendung von cat
zu vermeiden (und wenn Sie rsync
nicht verwenden ):
xargs -a file_list.txt mv -t /path/to/dest
Dies verarbeitet jeden gültigen Dateinamen, es sei denn, er enthält einen Zeilenumbruch, wenn die Dateien einzeln pro Zeile aufgelistet werden.
Lösung 2:
rsync hat mehrere Optionen, die eine Liste von Dateien verarbeiten können (--files-from
, --include-from
usw.).
Zum Beispiel wird dies den Zweck erfüllen:
rsync -a /source/directory --files-from=/full/path/to/listfile /destination/directory
Lösung 3:
for file in `cat listoffiles`; do mv "$file" /path/of/destination ; done
unter der Annahme von bash, plus listoffiles
enthält eine Datei pro Zeile. Mein einziger Einwand gegen die rsync-Route ist, dass das OP nach einer Methode zum Verschieben der Dateien fragt, nicht zum Kopieren. rsync hat mehr Flaggen als eine königliche Hochzeit, also bin ich sicher, dass es weiter modifiziert werden kann, um das zu tun, aber manchmal ist einfacher besser!
Lösung 4:
rsync --files-from=file_list.txt /path/to/source/ /path/to/dest/
Rsync hat den zusätzlichen Vorteil gegenüber cp
oder mv
Befehle, weil es automatisch Ordner erstellt, wenn sie nicht existieren.
Lösung 5:
Dies hängt vom Format Ihrer Textdatei ab. Wenn Sie beispielsweise die Liste der Dateien so geschrieben haben, dass sich jede Datei in einer neuen Zeile befindet. Sie können xargs verwenden wie:
$ cat your_text_file | xargs cp -t /path/to/destination
Sie können auch find
verwenden Befehl mit -exec
Möglichkeit. zum Kopieren/Verschieben der Dateien.