На этот вопрос уже есть ответ здесь:
Я хочу переместить все файлы *. Txt
из всех подкаталогов, расположенных в данном каталоге, в один каталог назначения.
При выполнении описанных ниже действий перемещается КАЖДЫЙ файл - как уменьшить его до всех файлов *. Txt
?
find -type f -print0|xargs -0r mv -it "/path to my folder/destination-directory"
Добавьте -name
, тест
find -type f -name "*.txt" -print0 |...
не забывает заключать шарик в кавычки для предотвращения расширений оболочки.
Для поиска без учета регистра, используйте -iname
вместо -name
find /folder/ -type f -name "*.txt" -exec mv {} /other/folder/ \;
я протестировал это, работы приятно.
Используя Вашу исходную команду:
find . -type f -name "*.txt" -print0|xargs -0r mv -it /path/to/destination
Информация:
.
: поиск в текущем месте
"*.txt"
: файлы, которые имеют .txt
расширение на их имена
Используйте шаблон шарика с -name
опция find
указать на желаемый шаблон, *.txt
в Вашем случае:
find . -type f -name '*.txt' -exec mv -t /destination {} +
Конечно, замена /destination
с фактическим целевым каталогом.
Примечания:
Вы не должны метать икру xargs
и неименованный канал, используйте mv
логика в -exec
предикат find
find ... -exec
дескрипторы весь вид возможных имен файлов и ARG_MAX
также
GNU mv
(значение по умолчанию в Ubuntu), имеет -t
взять целевой каталог, так, чтобы можно было усилить +
аргумент -exec
отправить все файлы в единственном выполнении mv
(или по крайней мере минимальные выполнения, если ARG_MAX
инициирован в процессе),