GNU/Linux >> Znalost Linux >  >> Linux

Pomocí grep vyhledejte obsah v souborech a přesuňte je, pokud se shodují

Toto používám ve Fedora Core 12:

grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR

Pokud chcete najít a přesunout soubory, které neodpovídají vašemu vzoru (přesunout soubory, které neobsahují 'Subject \[SPAM\]' v tomto příkladu) použijte:

grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR

-Z znamená výstup s nulami (\0) za názvy souborů (takže se jako oddělovače nepoužívají mezery).

xargs -0

znamená interpretovat \0 jako oddělovače.

-L znamená najít soubory, které neodpovídají vzoru. Nahraďte -L s -l pokud chcete přesunout soubory, které odpovídají vašemu vzoru.

Potom

-I{} mv {} DIR

znamená nahradit {} s názvy souborů, takže dostanete mv filenames DIR .


Tohle mi pomohlo:

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

Samozřejmě jsem již byl v požadované složce (proto ./ ) a přesunul je do sousední složky. Můžete je však změnit na libovolné cesty.

Nevím, proč přijatá odpověď nefungovala. Také jsem neměl mezery a speciální znaky v názvech souborů - možná to nebude fungovat.

Ukradeno zde:Příkaz Grep k vyhledání souborů obsahujících textový řetězec a jejich přesunutí


Tato alternativa funguje tam, kde xargs není k dispozici:

grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done

Linux
  1. Najít vzor a přesunout?

  2. Jak najít více řetězců v souborech?

  3. Najděte a zkopírujte soubory

  1. Najít soubory a rozbalit je (s mezerami)

  2. Hledání spustitelných souborů pomocí ls a grep

  3. Jak prohledám adresáře a najdu soubory, které odpovídají regulárnímu výrazu?

  1. Jak používat příkaz Grep k vyhledání textu v souborech

  2. Použít příkaz Grep a vyhledat?

  3. Jak rekurzivně vypisovat soubory a třídit je podle času úpravy?