Подтвердить что ты не робот

Рекурсивная копия определенных файлов в Unix/Linux?

Мне нужно скопировать все файлы *.jar из каталога и всех его подкаталогов. Как я могу сделать это в терминале UNIX/Linux? Команда cp -r *.jar /destination_dir не работает.

4b9b3361

Ответ 1

rsync полезен для локального копирования файлов, а также между машинами. Это сделает то, что вы хотите:

rsync -avm --include='*.jar' -f 'hide,! */' . /destination_dir

Вся структура каталогов из. копируется в /destination _dir, но копируются только файлы .jar. Параметр -a гарантирует, что все разрешения и время на файлах не будут изменены. -m опускает пустые каталоги. -v - для подробного вывода.

Для сухого запуска добавьте -n, ​​он скажет вам, что он будет делать, но на самом деле ничего не копирует.

Ответ 2

Если вам не нужна структура каталогов только файлы jar, вы можете использовать:

shopt -s globstar
cp **/*.jar destination_dir

Если вам нужна структура каталогов, вы можете проверить опцию cp --parents.

Ответ 3

Если ваш поиск имеет ключ -exec и параметр cp an -t:

find . -name "*.jar" -exec cp -t /destination_dir {} +

Если вы обнаружите, что не обеспечивает "+" для параллельного вызова, вы можете использовать ";" но тогда вы можете опустить -t:

find . -name "*.jar" -exec cp {} /destination_dir ";"

Ответ 4

tar -cf - `find . -name "*.jar" -print` | ( cd /destination_dir && tar xBf - )

Ответ 5

cp --parents `find -name \*.jar` destination/

из man cp:

--parents
       use full source file name under DIRECTORY

Ответ 6

Если вы хотите поддерживать одну и ту же иерархию каталогов под пунктом назначения, вы можете использовать

(cd SOURCE && find . -type f -name \*.jar -exec tar cf - {} +) \
  | (cd DESTINATION && tar xf -)

Этот способ сделать это, вместо того, чтобы расширять вывод find внутри back-ticks, имеет то преимущество, что способен обрабатывать любое количество файлов.

Ответ 7

find . -name \*.jar | xargs cp -t /destination_dir

Предполагая, что имена ваших jar файлов не содержат пробелов, а ваш cp имеет параметр -t. Если cp не может выполнить "-t"

find . -name \*.jar | xargs -I FILE cp FILE /destination_dir