Скопировать файлы .txt в определенную директорию

У меня проблема с копированием файла в моих каталогах.

У меня есть файлы .txt и .jpeg во многих каталогах, и я хочу скопировать только файлы .txt соответствии с каталогом. Например, у меня есть следующее:

 direct/direct1 direct/direct2 direct1: file.txt file2.txt file.jpeg file2.jpeg direct2: file3.txt file4.txt file3.jpeg file4.jpeg 

в моей команде копирования мне нужны только файлы .txt из каждой директории

2 Solutions collect form web for “Скопировать файлы .txt в определенную директорию”

Вы можете использовать find только для выбора файлов `.txt из-под какого-то каталога:

 find direct/direct? -name "*.txt" 

это будет распечатывать все файлы, поэтому вы можете проверить, что у вас есть то, что вы хотели, и не слишком много будет выбрано. *.txt должен быть указан, иначе оболочка попытается развернуть это .txt файлы в текущем каталоге.

Что касается копирования, вы хотите сделать (чаще всего) одну из двух вещей: сохранить путь под прямым файлом .txt или нет. Чтобы сохранить его, используйте:

 find direct/direct? -name "*.txt" -print0 | cpio -pdmv0 target_directory 

чтобы скопировать все файлы .txt в один целевой каталог, используйте что-то похожее на то, что предложил @lambert:

 find direct/direct? -name "*.txt" -exec cp {} target_directory + 

(использование + вместо \; более эффективно, поскольку несколько имен файлов передаются в один cp когда + используется вместо вызова cp для каждого отдельного файла при использовании \; )

Для второй команды -print0 нет необходимости обрабатывать пути со специальными символами, имена файлов, которые заменяют {} , должным образом разделяются путем вызова cp .

Если вы хотите скопировать все .txt файлы в каталог, используйте шаблон подстановки :

 cp direct/direct1/*.txt target 

Это копирует все .txt файлы, которые находятся в каталоге direct/direct1 в target каталог (который уже должен существовать).

Вы можете передавать несколько шаблонов для копирования файлов из нескольких каталогов:

 cp direct/direct1/*.txt direct/direct2/*.txt target 

Если вы хотите скопировать файлы .txt из всех подкаталогов direct , вы также можете использовать подстановочный знак для каталога:

 cp direct/*/*.txt target 

Если вы хотите копировать только из определенных каталогов, вы можете использовать шаблон подстановки, который соответствует только этим каталогам. Например, если direct имеет четыре подкаталога foo , bar , baz и qux и вы хотите копировать только файлы из bar и baz , вы можете использовать

 cp direct/ba?/*.txt target 

Ни один из примеров до сих пор не копирует файлы из самого себя, или из подкаталогов direct . Если вы хотите скопировать файлы .txt из direct , вам необходимо включить его в список, например

 cp direct/*.txt direct/*/*.txt target 

Если вы хотите скопировать файлы из direct , всех его подкаталогов, всех их подкаталогов и т. Д., Вы можете использовать подстановочный символ ** , если ваша оболочка поддерживает его. Он работает из коробки в zsh, но в bash вам нужно сначала включить его с помощью shopt -s globstar .

 cp direct/**/*.txt target 

Обратите внимание, что все файлы копируются в сам target , это не воспроизводит структуру каталогов. Если вы хотите воспроизвести структуру каталогов, вам понадобится другой инструмент, например rsync ( tutorial ) или pax .

 rsync -am --include='*.txt' --include='*/' --exclude='*' direct/ target/ cd direct && pax -rw -pe -s'/\.txt$/&/' -s'/.*//' . target/ 
  • Проверка большого каталога после копирования с одного жесткого диска на другой
  • Поиск источника и источника копирования для плоской цели
  • cp / etc / DIR_COLORS ~ / .dir_colors не отвечает
  • ls показывает каталог, но он недоступен
  • Скопировать файл из cifs mount при изменении файла
  • Заменить файл тогда и только тогда, когда stdin отличается от содержимого файла
  • Как клонировать весь диск на больший диск и затем разгружать?
  • Можно ли изменять права доступа к файлам при копировании
  • Перенос файла по нестабильному соединению SSH
  • Разрешения «проблема» с использованием SCP для копирования в корневую папку из локального
  • Как скопировать несколько файлов, но сохранить их расширения одинаково?
  • Interesting Posts

    Удалить последний символ последнего элемента в массиве bash

    Могу ли я отключить встроенный gpu на моем ноутбуке Optimus, чтобы использовать только графический процессор Nvidia?

    Два разных / etc / hosts в зависимости от времени

    используя sed с амперсандом (&)

    Взаимодействие со стеком ввода для исправления разрыва на сенсорном экране

    ssh не возвращается при выполнении удаленного процесса в bg

    Как определить модуль ядра Linux на основе руткитов?

    Локальный DNS-сервер отказывается запрашивать DNS

    Запуск сценария для настройки конфигурации монитора

    Может ли overlayFS поддерживать более двух уровней?

    Продолжается ли pkill (и его родительские процессы)?

    Когда ни один сервер dhcp не отвечает, как заставить dhclient использовать статический лизинг из dhclient.conf вместо предыдущего аренды dhcp?

    Как получить файл на хост, когда все, что у вас есть, это последовательная консоль?

    systemd Ошибка MAILTO-замены

    Интернет-соединение потеряно после установки dnsmasq

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