複数のディレクトリにファイルのコピーを作成するには?

複数のディレクトリにファイルのコピーを作成するには?

フォルダ構造があります

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.cfgに作成されました。conf/

どんなアイデアがありますか?

明確にするために、Mac OSXでこれを行っていますが、可能であればCentOSでも同じコマンドを実行するのが理想的です。

答え1

努力する

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

execに置き換えると、execdir「アクション」()がファイル()を含むフォルダ内で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

静的構造なので、ファイル名を直接指定し、シェルにそれをコピーさせることができます。

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

関連情報