我有不同名称的文件,例如在不同的子目录中,例如:
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 \;