web-dev-qa-db-ja.com

コマンドから出力されたすべてのファイルを移動するにはどうすればよいですか?

Wordの添付ファイルが含まれていないファイルを検索するためのこのgrepコマンドがあります。

grep -L -- Attachments *

そのコマンドから出力されるすべてのファイルを移動したいと思います。 bashでそれを行うにはどうすればよいですか?パイプを使用しますか?フルオンのスクリプトでより冗長なif/thenステートメントを使用しますか?

22
bernie2436

ファイル名に新しい行、タブ、スペース、またはglobの組み合わせが含まれていて一致する可能性がある場合は、どれもわかっていない場合、1回限りのケースの方が簡単です。

mv $(grep -L Attachments *) dest_dir
18
Graeme

あなたがしたいことは、パイプとgreps -Zオプションを使用することです:

GNU grepおよびmvの使用

grep -LZ -- Attachments * | xargs -0 mv -t target_directory

-Zxargs -0を組み合わせると、特殊文字を含むファイル名を処理できます。

BSD grepとmvを使用(MacOS Xと同様)

grep -L --null -- Attachments * |
while IFS= read -r -d "" file; do 
    mv "./$file" target_directory
done

BSDでは、grep -Z解凍を意味し、grep --nullはBSDとGNUの両方で機能します。 BSD mvにはオプションがありません-t

36
Anthon