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


22

添付ファイルという単語のないファイルを見つけるために、このgrepコマンドがあります。

grep -L -- Attachments *

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

回答:


18

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

mv $(grep -L Attachments *) dest_dir

36

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

GNU grepおよびmvの使用

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

-Z組み合わせるxargs -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 --nullBSDやGNUの両方で動作します。BSDにmvはオプションがありません-t

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.