2008-09-18 20 views

Trả lời

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

Các -Z nghĩa đầu ra với số không (\ 0) sau tên tập tin (vì vậy không gian không được sử dụng như delimeters) .

xargs -0 

nghĩa là diễn giải \ 0 để được phân tách.

Sau đó

-I{} mv {} DIR 

phương tiện thay thế {} với tên tập tin, để bạn có được mv filenames DIR.

+1

Xin cảm ơn, thủ đô -Tôi có nên viết chữ thường trên xarg của tôi – user17582

+0

Trong xargs của tôi, -i không được dùng nữa. Nhưng sandrv có thể có một phiên bản cũ hơn (do đó, YMMV). – gbarry

+6

Không nên là -l thay vì -L? – TopQ

0

Bạn có thể chuyển kết quả đến lệnh tiếp theo bằng cách sử dụng grep ... | xargs mv {} destination

Kiểm tra xargs người đàn ông để biết thêm thông tin.

1

Có một số cách nhưng đây là một chậm nhưng chạy failsafe một:

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 
16

này thay thế công trình nơi xargs không Sẵn có:

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

Đây là những gì tôi sử dụng trong Fedora Core 12:

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

lẽ điều này sẽ làm việc:

mv $(grep -l 'Subject: \[SPAM\]' | awk -F ':' '{print $1}') your_file 
0

làm việc hoàn hảo cho tôi:

  • di chuyển các tệp chứa văn bản chứa từ MYSTRINGTOSEARCH đến thư mục MYDIR.

    tìm. -type f -exec grep -il 'MYSTRINGTOSEARCH' {} \; -exec mv {} MYDIR/\;

Tôi hy vọng điều này sẽ giúp

2

Đây là những gì giúp tôi:

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

Tất nhiên, tôi đã có trong thư mục cần thiết (đó là lý do tại sao ./) và di chuyển chúng vào thư mục láng giềng . Nhưng bạn có thể thay đổi chúng thành bất kỳ đường dẫn nào.

Tôi không biết tại sao câu trả lời được chấp nhận không hiệu quả. Ngoài ra tôi không có không gian và các ký tự đặc biệt trong tên tập tin - có thể điều này sẽ không hoạt động.

đánh cắp ở đây: Grep command to find files containing text string and move them

1
mv `grep -L -r 'Subject: \[SPAM\]' .` <directory_path> 

Giả sử rằng bạn đã viết grep lợi nhuận các tập tin đường dẫn bạn đang mong đợi.

Các vấn đề liên quan