Если бы я хотел скопировать все *.so
файлы из src
в dst
я бы сделал:
cp src/*.so dst
Однако я хочу скопировать все файлы *.so
из src и его подкаталогов в dst
. Есть какие-нибудь подсказки?
Пытаться:
find src/ -type f | grep -i so$ | xargs -i cp {} dst
Если вы используете Bash, вы можете включить опцию оболочки globstar
для рекурсивного сопоставления файлов и каталогов:
shopt -s globstar
cp src/**/*.so dst
Если вам нужно найти файлы, имена которых начинаются с .
и / или файлы в каталогах и под ними, имена которых начинаются с .
Также установите параметр dotglob
(например, с shopt -s dotglob
).
Вы можете установить их обоих одной командой:
shopt -s globstar dotglob
Я попробовал команду, предложенную Майком:
find src/ -type f | grep -i so$ | xargs -i cp {} dst
но в итоге все файлы были помещены в каталог dst
с потерянными относительными путями.
Чтобы сохранить относительные пути, команду необходимо изменить следующим образом:
find src/ -type f | grep -i so$ | xargs -i cp {} dst/{}
Еще один способ сделать это так:
find src/ -type f -name "*.so" -exec cp {} dst/ \;
Grep можно заменить с помощью команды find's -name:
find src/ -type f -name "*.so" | xargs -i cp {} dst/{}