Мне нужно скопировать все файлы *.jar
из каталога и всех его подкаталогов. Как я могу сделать это в терминале UNIX/Linux? Команда cp -r *.jar /destination_dir
не работает.
Рекурсивная копия определенных файлов в Unix/Linux?
Ответ 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