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

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

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

当然,我考虑过 cp 命令,但我猜想文件夹结构的深度需要相同才能使其工作。

答案1

如果您想避免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 path/to/src -type f -name XYZ\* -exec cp -p {} path/todest/ \;

答案3

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

cp path/to/src/**/XYZ* path/to/dest

相关内容