web-dev-qa-db-ja.com

特定のファイルを見つけて、同じコマンドで新しいディレクトリに移動する方法は?

だから私は周りを見ていました、そして私が見つけたすべてはこれがディレクトリがすでに作成されている場合にのみこれを行う方法です、これはこれです:

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

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

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

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

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

あなたは データをパイプすることはできません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 \;
1
terdon