如何将具有相同扩展名的不同名称的文件复制到所有具有标准文件名的文件?

Use*_*ser 0 find cp

我有不同命名的文件,例如在不同的子目录中,例如:

a/apple.txt
b/orange.txt
c/pear.txt
Run Code Online (Sandbox Code Playgroud)

如何将它们复制到各自目录中具有统一名称 (fruit.txt),因此最终结果是:

a/apple.txt
a/fruit.txt
b/orange.txt
b/fruit.txt
c/pear.txt
c/fruit.txt
Run Code Online (Sandbox Code Playgroud)

(文件 a/apple.txt 和 a/fruit.txt 的内容应该相同)

我的想法是这样做:

find . -name "*.txt" -exec cp {} fruit.txt \;

但我不确定这是否会将fruit.txt 放在每个相应的子目录中,或者是否只是将其放在当前目录中。

Kus*_*nda 5

你的命令,

find . -name "*.txt" -exec cp {} fruit.txt \;
Run Code Online (Sandbox Code Playgroud)

将正确地找到.txt当前目录中或当前目录下具有文件名后缀的所有文件(和目录等),并将它们一个接一个地复制到当前目录中的名称fruit.txt中。

您想要做的是将它们复制到与原始文件相同的目录中,并且可能只考虑常规文件,同时避免任何已经存在的fruit.txt名称:

find . -type f -name '*.txt' ! -name fruit.txt -execdir cp -- {} fruit.txt \;
Run Code Online (Sandbox Code Playgroud)

当您使用非标准(但通常可用)-execdir谓词时,您使用的命令将在找到的文件的目录中执行。这意味着以上内容cp会将文件复制到fruit.txt与找到的文件相同的目录中。

根据您想要的效果,您可能想要使用符号链接而不是文件的副本:

find . -type f -name '*.txt' ! -name fruit.txt -execdir ln -sf -- {} fruit.txt \;
Run Code Online (Sandbox Code Playgroud)