Как вы можете перемещать (или копировать) все файлы определенного типа в каталог в 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 
  • Как мне сделать grep список совпадений перед именем файла?
  • Сложность создания регулярного выражения для поиска по меньшей мере двух вхождений символа в файл
  • Скопируйте только файлы и только строки, содержащие строку, сохраняя структуру каталогов
  • Термин поиска труб из буфера обмена (не имя файла) в grep для поиска папки
  • Подключения к серверу мониторинга - проблема форматирования Netstat
  • Как использовать регулярное выражение BRE или ERE для соответствия шаблону, который не имеет определенной строки
  • Извлеките все строки из одного слова в другое с моим совпадением между
  • Добавьте mtime к выходу grep -c и отсортируйте результат по mtime
  • Grep первые 50 строк файлов для шаблона
  • использование grep для подсчета уникальных идентификаторов с границей слов
  • Копирование XML-контента между двумя тегами из одного файла в другой
  • Interesting Posts

    Возможно ли в bash начать чтение файла из смещения счетчика байтов?

    Система отказывается от SSH и зацикливается на «загрузке» после установки systemd

    Когда {a, b, c} расширен в bash, когда это не так?

    Проверка вашего интернет-соединения с помощью speedtest-cli и просмотра

    Еще один `rm: не может удалить ‘файл’: В доступе отказано`

    Контейнер LXC для использования «виртуального» интерфейса с хоста (семантика пространства имен)

    Посещение сайтов darknet / Tor с помощью Firefox

    как преодолеть конфликт между двумя сетевыми картами – virtualbox ubuntu

    firewalld для OpenVPN с https, ssh и smtp

    Fedora 20 kde меняет раскладку клавиатуры в Латинскую Америку?

    Подсчитайте количество слов, начинающихся с каждой буквы в файле

    Конфигурация сервера SFTP для занятого производства

    Найти, где символ общей библиотеки, определенный в живой системе, / список всех символов, экспортированных в систему

    lsof: нет записи pwd для UID

    Подключить сетевой сетевой диск к Linux в другом домене

    Linux и Unix - лучшая ОС в мире.