
Я запустил команду, которая находит много файлов на основе некоторых критериев поиска. Она возвращает файлы следующим образом:
./somepath/somepath/file.something
./asdf/asdf/s.php
./etc/a.php
./a/b/c/d/e/f/g.jpg
Поэтому мне стало интересно, если я запишу этот вывод в файл (т. е. по одному файлу на строку), может ли кто-нибудь помочь мне написать команду, которая будет проходить по файлу и перемещать файлы по одному в указанный каталог?
Заранее спасибо.
решение1
while read -r filename
do
mv -- "$filename" directory
done < list_of_files.txt
Не проверял (у меня рабочий ПК с Windows), но должно работать.
решение2
your_command | xargs -I% mv "%" dest_dir
Если ваша команда find
или у вас есть способ завершить имена файлов нулём:
your_command | xargs -0 -I% mv "%" dest_dir
или
find [find-args] -print0 | xargs -0 -I% mv "%" dest_dir
Использование нулей для завершения имен файлов позволяет работать с именами файлов, которые могут содержать пробелы, символы новой строки и т. д.
Вы также можете использовать xargs
для обработки вашего файла, если вы его уже создали:
xargs -a filename -I% mv "%" dest_dir
решение3
Другой вариант, если имена файлов не содержат пробелов, может быть таким:
mv `search_command_here` dest_directory
(Синтаксис с обратными кавычками также является bash-измом, но в вопросе конкретно указано, что это относится к Linux, и все основные дистрибутивы Linux по умолчанию используют bash.)