Mehrere Dateien aus der Dateinamenliste in einen neuen Ordner verschieben

Mehrere Dateien aus der Dateinamenliste in einen neuen Ordner verschieben

Ich habe eine Liste mit Dateinamen in list.txt, die „abc1.png, abc2.png, abc3.png...“ enthält.

Allerdings kenne ich die Verzeichnisse nicht, in denen sich die Dateien befinden.

Ich möchte alle Dateien in der TXT-Datei finden und in einen neuen Ordner verschieben.

Antwort1

Du brauchstjeden Dateinamen zeilenweise lesen, dann versuchen Sie findes mit der nameOption und schließlich mvzum Ziel:

while IFS= read -r filename; do
    find /somewhere -type f -name "$filename" -exec mv -- {} /somewhere/else/ \;
done < file.txt

Wird {}durch den gefundenen Dateipfad ersetzt.

Antwort2

Vorausgesetzt, Ihre Dateinamen enthalten keine "," oder Zeilenumbrüche und jede Datei ist in list.txt nur einmal vorhanden. Natürlich müssen Sie auch newdirectory in das gewünschte Verzeichnis ändern. Wenn eine Datei in list.txt fehlt, wird die Datei nicht kopiert (und es werden keine Informationen bereitgestellt).

sed -s "s/, /\\n/g" list.txt | xargs -IFILE -n1 find -name FILE -exec mv {} newdirectory \;

Antwort3

Mit etwas Bash ist das ganz einfach:

Suchen Sie zuerst Ihre Dateien mit „find“ und leiten Sie die Ausgabe in eine andere Datei um:

für arg in $(cat list.txt); führe find / -name $arg -print >> files_with_path.txt aus; fertig

dann mv die Dateien:

für arg in $(cat files_with_path.txt); mache mv $arg /dein/Zielordner; fertig

verwandte Informationen