Как вы можете перемещать (или копировать) все файлы определенного типа в каталог в Unix?

Я еще не очень хорошо знаком со всеми трюками grep/find/awk/xargs .

У меня есть файлы, соответствующие определенному шаблону, скажем *.xxx . Эти файлы находятся в случайных местах в определенном каталоге. Как найти все такие файлы и перенести их в папку в моем домашнем каталоге в Unix (возможно, она еще не существует)?

4 Solutions collect form web for “Как вы можете перемещать (или копировать) все файлы определенного типа в каталог в Unix?”

 mkdir ~/dst find source -name "*.xxx" -exec mv -i {} -t ~/dst \; 

Если вы хотите переместить все файлы внутри иерархии каталогов в один каталог назначения, в bash ≥4 (поместите shopt -s globstar в ваш ~/.bashrc ) или zsh:

 mkdir ~/new-directory mv -i **/*.xxx ~/new-directory 

В других оболочках:

 mkdir ~/new-directory find . -name '*.xxx' -exec mv -i {} ~/new-directory \; 

Как прочитать эту команду find :

  • . : перемещение текущего каталога
  • -name '*.xxx' : действовать в файлах, имя которых соответствует этому шаблону
  • -exec … \; : выполнить эту команду для каждого файла, заменив {} на путь к файлу

Есть более сложная команда, использующая find быстрее, если у вас много файлов, так как не требуется вызывать отдельный mv процесс для каждого файла:

 find . -name '*.xxx' -exec sh -c 'mv -i "$@" "$0"' ~/new-directory {} + 

+ В конце говорит find чтобы вызвать команду для нескольких файлов за раз. Поскольку find может только помещать имена файлов в конец командной строки, а mv должен иметь конечный каталог последним, мы используем промежуточную оболочку для переупорядочения аргументов ( "$0" – это первый аргумент оболочки, ~/new-directory и "$@" – это последующие аргументы, исходящие из разложения {} ).

Если вы хотите скопировать структуру каталогов соответствующих исходных файлов в новый целевой каталог, вы можете использовать опцию –parents GNU cp:

 mkdir /path/to/target_dir cd source_dir find . -name '*.xxx' -exec cp -iv --parents -t /path/to/target_dir {} + 

вы можете использовать find без -exec‍ :

 mkdir /path/to/dest cp `find /path/to/source -name "*.jar"` /path/to/dest 
  • Подключения к серверу мониторинга - проблема форматирования Netstat
  • Как найти все файлы, которые НЕ содержат текстовую строку?
  • cshell alias: как использовать вложенные одинарные кавычки (') в псевдониме cshell
  • Как использовать + в регулярном выражении в sed?
  • Заменить все значения в одном столбце на 1
  • Команда grep не поддерживает начало «^» и «$» конца привязки строк, когда она с -Pz
  • Как использовать grep для поиска только в первой строке файлов для определенной строки?
  • Grep и regex: Почему следующее возвращает только определенную часть?
  • Рекурсивно заменить строку в файлах
  • grep: недопустимый контент \ {\}
  • Команда Grep в сценарии оболочки
  • Linux и Unix - лучшая ОС в мире.