Иметь список файлов, переместить их с помощью одной команды

Иметь список файлов, переместить их с помощью одной команды

Я запустил команду, которая находит много файлов на основе некоторых критериев поиска. Она возвращает файлы следующим образом:

./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.)

Связанный контент