Я пока не очень знаком со всеми хитростями grep/find/awk/xargs
.
Скажем, у меня есть файлы, соответствующие определенному шаблону *.xxx
. Эти файлы находятся в случайных местах в определенном каталоге. Как я могу найти все такие файлы и переместить их в папку в моем домашнем каталоге в Unix (которая может еще не существовать)?
Ответы:
источник
mv -i -t ~/dst {} +
Если вы хотите переместить все файлы в иерархии каталогов в один каталог назначения, в bash ≥4 (вставьте
shopt -s globstar
в свой~/.bashrc
) или zsh:В других оболочках:
Как читать эту
find
команду:.
: пройти текущий каталог-name '*.xxx'
: действовать на файлы, имя которых соответствует этому шаблону-exec … \;
: выполнить эту команду для каждого файла, заменив{}
путь к файлуСуществует более сложная команда, использующая
find
это быстрее, если у вас много файлов, так как не нужно вызывать отдельныйmv
процесс для каждого файла:В
+
конце указываетсяfind
вызывать команду для нескольких файлов одновременно. Такfind
как имена файлов можно помещать только в конец командной строки, аmv
каталог назначения должен быть последним, мы используем промежуточную оболочку для перестановки аргументов ("$0"
это первый аргумент оболочки~/new-directory
и"$@"
последующие аргументы, поступающие изfind
экспансия{}
).источник
Если вы хотите скопировать структуру каталогов соответствующих исходных файлов в новый целевой каталог, вы можете использовать опцию --parents GNU cp :
источник
Вы можете использовать находку без , а
-exec
также:источник
find -exec
это гораздо безопаснее; Например, вышеописанное не будет работать с именами файлов, содержащими пробелы.