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

7 linux cp

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

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

Jam*_*at7 10

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

cp -p $(find path/to/src -name 'XYZ*') path/to/dest
Run Code Online (Sandbox Code Playgroud)

$(...) 形式是一个 posix 版本的反引号过程替换。下面是一个例子。

find . -name 'd*a'
cp -p $(find . -name 'd*a') ../zeta
ls ../zeta
Run Code Online (Sandbox Code Playgroud)

这些命令产生以下输出:

./.?/dx2a
./.?/dx4a
./.tdot1/dx1a
./.tdot2/dx2a
cp: will not overwrite just-created `../zeta/dx2a' with `./.tdot2/dx2a'
dx1a  dx2a  dx4a
Run Code Online (Sandbox Code Playgroud)


Pau*_*l R 2

您可以使用find来实现此目的:

$ find path/to/src -type f -name XYZ\* -exec cp -p {} path/todest/ \;
Run Code Online (Sandbox Code Playgroud)