फाइल्स को + xargs के साथ ले जाना: लक्ष्य एक निर्देशिका नहीं है?


9

जब मैं निम्नलिखित कमांड चलाता हूं:

> mkdir some_dir
> find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} some_dir

मुझे सैकड़ों लाइनें मिलती हैं जो कहती हैं:

mv: target `/foo/bar/XX.csv` is not a directory

क्यों? मुझे लगा कि xargs निष्पादित करेगा:

mv /foo/barXX.csv some_dir

हर फ़ाइल के लिए जो findपाता है। क्या चल रहा है? वैसे, यह zsh के साथ है

अपडेट करें:

Update1:

मैंने कोशिश की:

find /foo/bar/ -name '*.csv' -print0 | xargs -0 mv {} -t some_dir

लेकिन फिर मुझे कुछ लाइनें मिलीं:

mv: cannot stat `{}': No such file or directory

हालाँकि मुझे लगता है कि कमांड मेरी फाइलों को सही ढंग से चला रहा है।

Update2:

मैं अकेले -tउपयोग करते समय विकल्प की जरूरत नहीं लगती mv। उदाहरण के लिए

> touch file1.txt
> touch file2.txt
> mkdir my_dir
> mv  file1.txt  file2.txt  my_dir

अच्छा काम करता है। -tउपयोग करते समय मुझे आवश्यकता क्यों है xargs?

जवाबों:


14

मान लें कि आपके पास GNU ( find, xargsऔर mv) है, इस पर अपनी कमांड बदलें:

$ find /foot/bar/ -name '*.csv' -print0 | xargs -0 mv -t some_dir

मैन पेज से अंशmv

   -t, --target-directory=DIRECTORY
          move all SOURCE arguments into DIRECTORY

उपरोक्त xargs ...कमांड का निर्माण करेगा ताकि स्थानांतरित करने के लिए कॉल इस तरह हो:

 $ mv 1.csv 2.csv 3.csv ... -t some_dir

Xargs की जरूरत नहीं है

आप findसभी कार्य करने के बाद ही इस दृष्टिकोण को छोड़ सकते हैं :

$ find /foot/bar/ -name '*.csv' -exec mv -t some_dir {} +

आपको इसकी आवश्यकता क्यों है mv -t ...?

यह उस तरीके के साथ करना है जो xargsहर बार चलाने के लिए फाइल के सेट का निर्माण कर रहा है, (यानी mv ...)।

जब आप mvअपने आप मैन्युअल रूप से कमांड चलाते हैं, तो आप यह नियंत्रित करते हैं कि कितने फाइलनाम इसके पास हैं और इसलिए आपको जरूरत नहीं पड़ने की चिंता है -t my_dirक्योंकि आप हमेशा गंतव्य निर्देशिका को अंतिम रूप देंगे।

संदर्भ


धन्यवाद! यह बहुत मददगार है। हालांकि मैं थोड़ा उलझन में हूं (मेरे अपडेट देखें)
एमिलियो वाज़केज़-रीना

1
निर्मित कमांड है mv -t some_dir 1.csv 2.csv 3.csv ...इसलिए फ़ाइल तर्क अंतिम हैं। यही कारण है कि प्रश्न में त्रुटि है, का उपयोग करने हेतु {}आप पारित करने के लिए है -I {}करने के लिए xargs
२०:०३ पर फ्रॉस्ट्सचुट

धन्यवाद। वह सब कुछ समझा देता है। अद्यतन 2 में मेरे दूसरे प्रश्न के बारे में क्या है? क्या आप जानते हैं कि मुझे -tनियमित रूप से कई फाइलों और एक निर्देशिका की आवश्यकता क्यों नहीं है mv?
एमिलियो वाज़केज़-रीना

1
@ user815423426 - जब मैं आज रात मौका पाऊँगा, तो मैं इसे बाद में अपडेट करूँगा, मुझे पता है क्यों।
स्लम

@ user815423426 - मैंने प्रश्न को अपडेट किया, मुझे पता है कि क्या यह समझ में आता है mv -t
स्लम

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.