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