Как переместить вывод команды 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).