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 find
es mit der name
Option und schließlich mv
zum 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