Use grep to find content in files and move them if they match

前端 未结 9 914
无人共我
无人共我 2020-12-12 13:05

I\'m using grep to generate a list of files I need to move:

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

How can I pass this list to the mv command

相关标签:
9条回答
  • 2020-12-12 13:23

    Maybe this will work:

    mv $(grep -l 'Subject: \[SPAM\]' | awk -F ':' '{print $1}') your_file
    
    0 讨论(0)
  • 2020-12-12 13:24

    There are several ways but here is a slow but failsafe one :

    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
    
    0 讨论(0)
  • 2020-12-12 13:30

    This alternative works where xargs is not availabe:

    grep -L -r 'Subject: \[SPAM\]' . | while read f; do mv "$f" out; done
    
    0 讨论(0)
  • 2020-12-12 13:33

    You can pass the result to the next command by using grep ... | xargs mv {} destination

    Check man xargs for more info.

    0 讨论(0)
  • 2020-12-12 13:38
    grep -L -Z -r 'Subject: \[SPAM\]' . | xargs -0 -I{} mv {} DIR
    

    The -Z means output with zeros (\0) after the filenames (so spaces are not used as delimeters).

    xargs -0
    

    means interpret \0 to be delimiters.

    Then

    -I{} mv {} DIR
    

    means replace {} with the filenames, so you get mv filenames DIR.

    0 讨论(0)
  • 2020-12-12 13:47

    This is what I use in Fedora Core 12:

    grep -l 'Subject: \[SPAM\]' | xargs -I '{}' mv '{}' DIR
    
    0 讨论(0)
提交回复
热议问题