GNU/Linux >> Linux の 問題 >  >> Linux

grep を使用してファイル内のコンテンツを検索し、一致する場合は移動します

これは私が 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

Linux
  1. Command Grepを使用して検索しますか?

  2. 検索を使用して特定のディレクトリを検索し、1つのディレクトリを除くその中のすべてのファイルを削除しますか?

  3. Linux で複数のファイルを見つけて名前を変更する

  1. パターンを見つけて移動しますか?

  2. ファイル内の複数の文字列を見つける方法は??

  3. Linuxでファイルを検索するには、検索と検索を使用します

  1. ファイルを検索してコピーする

  2. ファイルを検索して tar (スペースを含む)

  3. ls と grep を使用して実行可能ファイルを見つける