我有不同命名的文件,例如在不同的子目录中,例如:
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 放在每个相应的子目录中,或者是否只是将其放在当前目录中。
你的命令,
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)