将目录和子目录中与模式匹配的所有文件复制到单个目录中

将目录和子目录中与模式匹配的所有文件复制到单个目录中

如果我想将所有*.so文件从复制srcdst我会这样做:

cp src/*.so dst

但是,我想*.so从 src 复制所有文件,然后它的子目录进入dst。有什么线索吗?

答案1

尝试:

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

答案2

如果你使用 Bash,你可以打开globstar shell 选项递归匹配文件和目录:

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

如果您需要查找名称以 开头的文件.,和/或名称以 开头的目录中的文件.,请dotglob同时设置选项(例如,使用shopt -s dotglob)。您可以在一个命令中同时设置它们:

shopt -s globstar dotglob

答案3

我尝试了 Mike 建议的命令:

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

但最终将所有文件转储到目录中,dst并且其相对路径丢失。

为了保留相对路径,需要将命令修改为:

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

答案4

可以使用 find 来代替 grep-姓名

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

相关内容