Linux:如何复制具有特定名称模式的文件,其中复杂目录结构中的确切位置未知


7

我想将名为XYZ *的所有文件复制到一个文件夹中。问题是文件位于不同的子文件夹中,甚至文件夹结构的深度对于所有文件都不相同。幸运的是,至少每个文件都有一个唯一的名称。

当然,我想到了cp命令,但我想文件夹结构的深度需要相同才能实现。

linux  cp 

Answers:


9

如果你想避免find ... -exec cp ...使用bash(并且没有为其**形式使用zsh)启动许多单独的进程(如使用可能),你可以按如下方式执行单个cp:

cp -p $(find path/to/src -name 'XYZ*') path/to/dest

$(...)表单是反滴答引用的流程替换的posix版本。以下是一个例子。

find . -name 'd*a'
cp -p $(find . -name 'd*a') ../zeta
ls ../zeta

这些命令产生以下输出:

./.?/dx2a
./.?/dx4a
./.tdot1/dx1a
./.tdot2/dx2a
cp: will not overwrite just-created `../zeta/dx2a' with `./.tdot2/dx2a'
dx1a  dx2a  dx4a

2

你可以使用find来做到这一点:

$ find path/to/src -type f -name XYZ\* -exec cp -p {} path/todest/ \;

1

如果你使用zsh而不是bash,那么你可以使用**文件glob模式。这递归匹配所有子文件夹。

cp path/to/src/**/XYZ* path/to/dest
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.