2008-09-18 21 views
42
से मेल

मैं मैं बढ़ने की जरूरत है फ़ाइलों की एक सूची उत्पन्न करने के लिए ग्रेप उपयोग कर रहा हूँ करने के लिए:उपयोग ग्रेप फाइलों में सामग्री खोजने के लिए और उन्हें स्थानांतरित अगर वे

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

मैं कैसे mv कमांड के लिए इस सूची पारित कर सकते हैं और फ़ाइलों को कहीं और ले जाएं?

उत्तर

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

-Z शून्य (\ 0) फ़ाइल नामों के बाद से उत्पादन (ताकि रिक्त स्थान delimeters के रूप में इस्तेमाल नहीं कर रहे हैं) का अर्थ है:

+1

धन्यवाद, पूंजी- मुझे अपने xargs – user17582

+0

पर मुझे कम करना चाहिए, मेरे xargs में, -i को बहिष्कृत किया गया है। लेकिन sandrv का एक पुराना संस्करण हो सकता है (इस प्रकार, वाईएमएमवी)। – gbarry

+6

-एल के बजाय यह नहीं होना चाहिए? – TopQ

0

आप grep का उपयोग कर परिणाम को अगले आदेश में पास कर सकते हैं ... | xargs mv {} गंतव्य

अधिक जानकारी के लिए मैन xargs जांचें।

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 
1

ऐसे कई तरीके हैं, लेकिन यहां एक धीमी लेकिन फेल सेफ एक है ।

xargs -0 

का मतलब है कि 0 \ delimiters होने की व्याख्या करें।

फिर

-I{} mv {} DIR 

साधन फ़ाइल नामों के साथ {} की जगह है, तो आप mv filenames DIR मिलता है।

16

यह विकल्प काम करता है जहां xargs availabe नहीं है:

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

यह है कि मैं क्या फेडोरा कोर 12 में उपयोग है मेरे लिए सही:

  • उन फ़ाइलों को स्थानांतरित करें जिनमें टेक्स्ट MYUSTIRTOSEARCH शब्द MYDIR को स्पष्ट करता है।

    ढूंढें। -टेप f -exec grep -il 'MYSTRINGTOSEARCH' {} \; -exec एमवी {} MYDIR/\;

मुझे आशा है कि इस मदद करता है

1

हो सकता है कि यह काम करेगा::

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

कार्य

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

यह वही मुझे मदद की है:

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

बेशक

, मैं आवश्यक फ़ोल्डर में पहले से ही था (यही कारण है कि ./ है) और उन्हें पड़ोसी फ़ोल्डर में ले जाया । लेकिन आप उन्हें किसी भी पथ में बदल सकते हैं।

मुझे नहीं पता कि स्वीकृत उत्तर क्यों काम नहीं करता था। इसके अलावा मेरे पास फ़ाइल नामों में रिक्त स्थान और विशेष वर्ण नहीं थे - शायद यह काम नहीं करेगा।

यहाँ चोरी: Grep command to find files containing text string and move them

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

यह मानते हुए कि ग्रेप आप रिटर्न लिखा फ़ाइलों पथ आप उम्मीद कर रहे हैं।