Ho un elenco di nomi di file in list.txt, che hanno 'abc1.png, abc2.png, abc3.png ....'.
Tuttavia, non conosco le directory in cui si trovano i file.
Voglio trovare tutti i file nel file txt e spostarli in una nuova cartella.
Ho un elenco di nomi di file in list.txt, che hanno 'abc1.png, abc2.png, abc3.png ....'.
Tuttavia, non conosco le directory in cui si trovano i file.
Voglio trovare tutti i file nel file txt e spostarli in una nuova cartella.
Risposte:
Devi leggere ogni nome di file riga per riga , quindi provare ad find
usarlo con l' name
opzione e infine mv
a raggiungere il target:
while IFS= read -r filename; do
find /somewhere -type f -name "$filename" -exec mv -- {} /somewhere/else/ \;
done < file.txt
Il {}
sarà sostituito con il percorso del file trovato.
Supponendo che i nomi dei file non contengano "," o newline e che ogni file esista in list.txt solo una volta. Ovviamente devi anche cambiare nuova directory nella directory che desideri. Se manca un file in list.txt, il file non viene copiato (e non vengono fornite informazioni).
sed -s "s/, /\\n/g" list.txt | xargs -IFILE -n1 find -name FILE -exec mv {} newdirectory \;
Questo è facile con alcuni bash:
trova prima i tuoi file con find e reindirizza il risultato in un altro file:
per arg in $ (cat list.txt); trova / -name $ arg -print >> files_with_path.txt; fatto
quindi mv i file:
per arg in $ (cat files_with_path.txt); fare mv $ arg / your / dest / cartella; fatto
find / -name a.png
per individuare la directory, quindi eseguirecd DIRECTORY; mv $(cat list.txt) ~/
o si potrebbe scrivere uno script shell più complicato per scorrere la linea per linea, ma ciò potrebbe costare più tempo di quanto risparmi.