フォルダがすでに存在する場合にのみ、フォルダを別のディレクトリセットにコピーします。

フォルダがすでに存在する場合にのみ、フォルダを別のディレクトリセットにコピーします。

ディレクトリ1のフォルダがディレクトリ2にある場合は、あるディレクトリから別のディレクトリセットにフォルダをコピー(上書き)したいと思います。

たとえば、私のホームディレクトリに次のフォルダが保存されています。

home
    |admin
        |updates
            |package1
            |package2
            |package3

アプリケーションのビルドを含む別のフォルダがあります。

home
    |builds
        |build1
            |packages
                |package1
                |package2
                |package3
        |build2
            |packages
                |package1
                |package3
        |build3
            |rev1
                |packages
                    |package1
            |rev2
                |packages
                    |package2

「/home/updates/package」ディレクトリにある「package1」、「package2」、「package3」フォルダを、「/home/builds」ディレクトリに繰り返しある「packages」フォルダにコピーしたいと思います。そのフォルダはすでに存在します。

したがって、上記の例では、「package1」/「package2」/「package3」が「/home/builds/build1/packages」にコピーされます。 「package1」のみが「/home/builds/build3/rev1/packages」にコピーされます(「package2」/「package3」はそこにないためコピーされません)。

また、「build1」/「build2」/「build3」は所有者/グループ権限が異なる場合があるため、ターゲットディレクトリに関連する権限を維持したいと思います。

ベストアンサー1

mkdir -p test/updates/pack1
...
mkdir -p test/builds/builds1/packages/pack3
...
touch test/updates/pack1/f1-1
...

このコマンドを実行してください

find test/builds -type d  -name packages -exec bash -c 'for pk in "$1"/pack* ; do cp -r test/updates/"${pk##*/}" $1 ; done' none {} \;

挨拶

おすすめ記事