私はgrepを使用して、移動する必要があるファイルのリストを生成しています。
grep -L -r 'Subject: \[SPAM\]' .
このリストをmvコマンドに渡し、ファイルを別の場所に移動するにはどうすればよいですか?
grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR
-Zは、ファイル名の後にゼロ(\ 0)が付いた出力を意味します(したがって、スペースは区切り文字として使用されません)。
xargs -0
\ 0を区切り文字として解釈することを意味します。
それから
-I{} mv {} DIR
は{}
をファイル名に置き換えることを意味し、mv filenames DIR
を取得します。
この代替は、xargsが使用できない場合に機能します。
grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done
これは私を助けたものです:
grep -lir 'spam' ./ | xargs mv -t ../spam
もちろん、私はすでに必要なフォルダにいました(だから./
)それらを隣接するフォルダーに移動しました。ただし、任意のパスに変更できます。
受け入れられた回答が機能しなかった理由がわかりません。また、ファイル名にスペースと特殊文字がありませんでした-多分これは動作しません。
ここで盗まれた: テキスト文字列を含むファイルを見つけて移動するためのGrepコマンド
これは私がFedora Core 12で使用しているものです:
grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR
mv `grep -L -r 'Subject: \[SPAM\]' .` <directory_path>
あなたが書いたgrepがあなたが期待しているファイルパスを返すと仮定します。
たぶんこれは動作します:
mv $(grep -l 'Subject: \[SPAM\]' | awk -F ':' '{print $1}') your_file
いくつかの方法がありますが、ここでは時間がかかりますがフェールセーフです。
IFS=$'\n'; # set the field separator to line break
for $mail in $(grep -L -r 'Subject: \[SPAM\]' .); do mv "$mail" your_dir; done;
IFS=' '; # restore FS
私にぴったりの仕事:
word MYSTRINGTOSEARCHでテキストを含むファイルをディレクトリMYDIRに移動します。
見つける。 -type f -exec grep -il 'MYSTRINGTOSEARCH' {} \; -exec mv {} MYDIR/\;
これが役立つことを願っています