27

Если бы я хотел скопировать все *.so файлы из src в dst я бы сделал:

cp src/*.so dst

Однако я хочу скопировать все файлы *.so из src и его подкаталогов в dst . Есть какие-нибудь подсказки?

5 ответов5

32

Пытаться:

find src/ -type f | grep -i so$ | xargs -i cp {} dst
13

Если вы используете Bash, вы можете включить опцию оболочки globstar для рекурсивного сопоставления файлов и каталогов:

shopt -s globstar
cp src/**/*.so dst

Если вам нужно найти файлы, имена которых начинаются с . и / или файлы в каталогах и под ними, имена которых начинаются с . Также установите параметр dotglob (например, с shopt -s dotglob).  Вы можете установить их обоих одной командой:

shopt -s globstar dotglob
6

Я попробовал команду, предложенную Майком:

find src/ -type f | grep -i so$ | xargs -i cp {} dst

но в итоге все файлы были помещены в каталог dst с потерянными относительными путями.

Чтобы сохранить относительные пути, команду необходимо изменить следующим образом:

find src/ -type f | grep -i so$ | xargs -i cp {} dst/{}
2

Еще один способ сделать это так:

find src/ -type f -name "*.so" -exec cp {} dst/ \;
1

Grep можно заменить с помощью команды find's -name:

find src/ -type f -name "*.so" | xargs -i cp {} dst/{}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .