У меня есть список имен файлов в list.txt, в котором есть «abc1.png, abc2.png, abc3.png....».
Однако я не знаю каталогов, где находятся эти файлы.
Я хочу найти все файлы в текстовом файле и переместить их в новую папку.
решение1
Вам нужночитать каждое имя файла построчно, затем попробуйте перейти к find
нему с помощью name
опции и, наконец, mv
к цели:
while IFS= read -r filename; do
find /somewhere -type f -name "$filename" -exec mv -- {} /somewhere/else/ \;
done < file.txt
Будет {}
заменен найденным путем к файлу.
решение2
Предполагая, что имена ваших файлов не содержат ", " или новых строк и каждый файл существует в list.txt только один раз. Вам также, естественно, придется изменить newdirectory на нужный вам каталог. Если какой-либо файл в list.txt отсутствует, файл не копируется (и информация не предоставляется).
sed -s "s/, /\\n/g" list.txt | xargs -IFILE -n1 find -name FILE -exec mv {} newdirectory \;
решение3
Это легко сделать с помощью bash:
сначала найдите ваши файлы с помощью find и перенаправьте вывод в другой файл:
для arg в $(cat list.txt); do find / -name $arg -print >> files_with_path.txt; готово
затем mv файлы:
for arg in $(cat files_with_path.txt); do mv $arg /your/dest/folder; done