これにはfindを使用することをお勧めします。
いくつかのテスト対象を作成しましょう:
$ mkdir -p ./testing/test{1,2,3,4}
$ touch ./testing/test{1,2,3,4}/test{a,b}
結果は次のようになります。
$ ls -R ./testing
./testing:
test1 test2 test3 test4
./testing/test1:
testa testb
./testing/test2:
testa testb
./testing/test3:
testa testb
./testing/test4:
testa testb
今、実行します
$ mkdir ./testing/copy
$ find ./testing/ -mindepth 1 -maxdepth 1 ! -name test1 ! -name test3 ! -name copy -execdir cp -R '{}' ./copy/ ';'
結果は次のようになります。
$ ls -R ./testing/
./testing/:
copy test1 test2 test3 test4
./testing/copy:
test2 test4
./testing/copy/test2:
testa testb
./testing/copy/test4:
testa testb
./testing/test1:
testa testb
./testing/test2:
testa testb
./testing/test3:
testa testb
./testing/test4:
testa testb
背景情報:
概要:コピーする必要のあるディレクトリを見つけて、copyコマンドを実行します。この場合、「test1」と「test3」を除くすべてのディレクトリをコピーしましょう。
-mindepth 1オプションは、findがを含めるのを防ぎます。そしておそらく..ディレクトリ、これらは深さ0にあるからです。
-maxdepth 1オプションは、findがすべてのサブディレクトリを個別にコピーするのを防ぎます。コマンドcp-Rはサブディレクトリを処理するため、サブディレクトリがカバーされます。
-execの代わりに-execdirを使用すると、cpコマンドのターゲットディレクトリとしてパス全体を含める必要がなくなります。
findを実行する前にターゲットディレクトリをmkdirすることを忘れないでください。また、このディレクトリを結果から除外することを忘れないでください。したがって、!-私の例ではコピーオプションに名前を付けます。
これがあなたを正しい方向に向けることを願っています。