
そこで調べてみたところ、ディレクトリがすでに作成されている場合にのみこれを行う方法しか見つかりませんでした。つまり、次のとおりです。
find source -name '*.z' -exec cp {} destination \;
しかし、同じコマンドでこれらのファイルを送信する新しいディレクトリを作成するにはどうすればよいでしょうか? これは私が試した方法ですが、成功しませんでした:
find source -name '*.z' -exec cp {} | mkdir newDirectory \;
答え1
install
1 つのオプションは、 の代わりに コマンドを使用することです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 \;