Как переместить вывод команды find в другой каталог?

Я хочу вывод этой команды find /home -name *.pdf переместить файлы в результате поиска в другой каталог, например, с помощью канала. Как я могу это сделать?

2 ответа

Решение

Вам не нужно никаких труб, и xargs сделать имена файлов в качестве аргументов для mv,

Просто используйте mv в пределах -exec действие find:

find /home -type f -name '*.pdf' -exec mv -t /destination {} + 
  • замещать /destination с фактическим каталогом назначения
  • find будет обрабатывать все возможные имена файлов
  • find справится ARG_MAX передавая столько имен файлов за один раз, чтобы не вызывать ARG_MAX
  • Если вы ищете только файлы (предположительно в этом случае), ограничьте вектор поиска, добавив -type f
  • Процитируйте расширение glob, '*.pdf', так что оболочка не расширяет их заранее как find будет обращаться с ними

Если по какой-то странной причине или в целях обучения, вы должны использоватьxargs:

find /home -type f -name '*.pdf' -print0 | xargs -0 mv -t /destination  

Если в именах ваших PDF-файлов нет пробелов, другой способ сделать это - запустить эту команду в своем терминале:

mv $(find /home -type f -name '*.pdf') ./destination

$() применяет вывод команды run (find /home -type f -name '*.pdf') к команде за ее пределами (mv [...] ./destination).

Другие вопросы по тегам