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