如何在多个目录中创建文件的副本?

如何在多个目录中创建文件的副本?

我有一个文件夹结构

conf/
    widget1/
        env1.cfg
        env2.cfg
    widget2/
        env1.cfg
        env2.cfg
    widget3/
        env1.cfg
        env2.cfg
    widget4/
        env1.cfg
        env2.cfg
    ...

我想要做的是找到所有名为 的文件env2.cfg,并在其名为 的目录中创建它们的副本env3.cfg

我试过了:

find -name env2.cfg -exec cp '{}' "env3.cfg" ";"

但刚刚env3.cfgconf/目录中创建。

有什么想法吗?

为了澄清起见,我在 Mac OSX 上执行此操作,但理想情况下,如果可能的话,相同的命令应该在 CentOS 上运行。

答案1

尝试

find . -name env2.cfg -execdir cp {} env3.cfg \;

通过替换execexecdir.这意味着您的“操作”( cp) 将发生在env2.cfg找到文件 ( ) 的文件夹内。

答案2

您的示例将所有 env2.cfg 文件复制到当前工作目录,即“.”。您需要给找到的文件起一个新名称,包括它的目录​​。这对我有用:

for file in $(find . -name env2.cfg); do backup=$(echo $file | sed 's/env2.cfg/env3.cfg/'); cp $file $backup; done

编辑:或者更优雅的方式,这样你就不必费心使用多个命令:

for file in $(find . -name env2.cfg); do cp $file ${file/env2/env3}; done

答案3

由于它是静态结构,您可以直接寻址文件名并让 shell 复制它们:

for f in conf/widget*/env2.cfg
do
    cp "${f}" "${f/env2/env3}"
done

相关内容