64

grep を使用して、移動する必要があるファイルのリストを生成しています。

grep -L -r 'Subject: \[SPAM\]' .

このリストを mv コマンドに渡して、ファイルを別の場所に移動するにはどうすればよいですか?

4

9 に答える 9

86

パターンに一致しないファイルを見つけて移動する場合('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ます。

于 2008-09-18T12:14:06.947 に答える
24

この代替手段は、xargs が利用できない場合に機能します。

grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done
于 2008-09-18T12:20:23.313 に答える
11

これは私が Fedora Core 12 で使用するものです:

grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR
于 2010-05-31T19:56:37.133 に答える
7

これが私を助けたものです:

grep -lir 'spam' ./ | xargs mv -t ../spam

もちろん、私はすでに必要なフォルダーにいて(そのため./)、それらを隣のフォルダーに移動しました。ただし、それらを任意のパスに変更できます。

受け入れられた答えがうまくいかなかった理由がわかりません。また、ファイル名にスペースや特殊文字が含まれていませんでした。これは機能しない可能性があります。

ここで盗まれました:テキスト文字列を含むファイルを見つけて移動するgrepコマンド

于 2015-04-03T09:55:55.007 に答える
4
mv `grep -L -r 'Subject: \[SPAM\]' .` <directory_path>

あなたが書いたgrepがあなたが期待しているファイルパスを返すと仮定します。

于 2015-09-10T10:05:18.550 に答える
2

多分これはうまくいくでしょう:

mv $(grep -l 'Subject: \[SPAM\]' | awk -F ':' '{print $1}') your_file
于 2012-02-14T10:53:35.790 に答える
1

いくつかの方法がありますが、ここに遅いがフェイルセーフな方法があります:

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
于 2008-09-18T12:12:40.977 に答える
0

私にぴったりの仕事:

  • MYSTRINGTOSEARCH という単語を含むテキストを含むファイルをディレクトリ MYDIR に移動します。

    探す 。-type f -exec grep -il 'MYSTRINGTOSEARCH' {} \; -exec mv {} MYDIR/ \;

これが役立つことを願っています

于 2014-09-05T15:00:27.723 に答える
-1

grep ... | を使用して、結果を次のコマンドに渡すことができます。xargs mv {} 宛先

詳細については、man xargs を確認してください。

于 2008-09-18T12:04:57.000 に答える