同じコマンドで特定のファイルを見つけて新しいディレクトリに移動するにはどうすればよいですか?

同じコマンドで特定のファイルを見つけて新しいディレクトリに移動するにはどうすればよいですか?

そこで調べてみたところ、ディレクトリがすでに作成されている場合にのみこれを行う方法しか見つかりませんでした。つまり、次のとおりです。

find source -name '*.z' -exec cp {} destination \;

しかし、同じコマンドでこれらのファイルを送信する新しいディレクトリを作成するにはどうすればよいでしょうか? これは私が試した方法ですが、成功しませんでした:

find source -name '*.z' -exec cp {} | mkdir newDirectory \;

答え1

install1 つのオプションは、 の代わりに コマンドを使用することですcp。このコマンドには、先頭のディレクトリをすべて作成するオプションがあります。

find source -name '*.z' -exec install -D {} dest \;

答え2

あなたデータをパイプできませんそのようにmkdir。次のようにすることができます。

find source -name '*.z' -exec sh -c 'mkdir -p newDirectory && cp "$@" newDirectory' _ {} +

または(ファイル名に改行が含まれていないと仮定)

find source -name '*.z' | while IFS= read -r foo; do 
   mkdir -p newDirectory;
   cp "$foo" newDirectory;
done 

または、ディレクトリを 1 つだけ作成して、名前が常に同じになるようにしたい場合:

mkdir newDirectory; find source -name '*.z' -exec cp {} newDirectory \;

関連情報