Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
548 views
in Technique[技术] by (71.8m points)

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

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 and move the files somewhere else?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

If you want to find and move files that do not match your pattern (move files that don't contain 'Subject [SPAM]' in this example) use:

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

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

xargs -0

means interpret to be delimiters.

The -L means find files that do not match the pattern. Replace -L with -l if you want to move files that match your pattern.

Then

-I{} mv {} DIR

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...