これは私が Fedora Core 12 で使用しているものです:
grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR
パターンに一致しないファイルを見つけて移動する場合 ('Subject \[SPAM\]'
を含まないファイルを移動します) この例では) 以下を使用:
grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR
-Z は、ファイル名の後にゼロ (\0) を付けて出力することを意味します (したがって、スペースは区切り文字として使用されません)。
xargs -0
\0 を区切り文字として解釈することを意味します。
-L は、パターンに一致しないファイルを見つけることを意味します。 -L
を置き換えます -l
で パターンに一致するファイルを移動したい場合。
次に
-I{} mv {} DIR
{}
を置き換えることを意味します ファイル名を使用すると、 mv filenames DIR
が得られます .
これが私を助けてくれました:
grep -lir 'spam' ./ | xargs mv -t ../spam
もちろん、私はすでに必要なフォルダーにいました (それが ./
の理由です) )、それらを隣接するフォルダーに移動しました。ただし、それらを任意のパスに変更できます。
受け入れられた答えがうまくいかなかった理由がわかりません。また、ファイル名にスペースや特殊文字が含まれていませんでした。これは機能しない可能性があります。
ここで盗まれました:テキスト文字列を含むファイルを検索して移動する grep コマンド
この代替手段は、xargs が利用できない場合に機能します:
grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done