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

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

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

a/apple.txt
b/orange.txt
c/pear.txt

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

a/apple.txt
a/fruit.txt
b/orange.txt
b/fruit.txt
c/pear.txt
c/fruit.txt

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

我的想法是这样做:

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

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

答案1

你的命令,

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

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

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

find . -type f -name '*.txt' ! -name fruit.txt -execdir cp -- {} fruit.txt \;

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

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

find . -type f -name '*.txt' ! -name fruit.txt -execdir ln -sf -- {} fruit.txt \;

相关内容