एक विशिष्ट गंतव्य निर्देशिका में एक साथ कई फ़ाइलों को कैसे स्थानांतरित करें?

मुझे कुछ निर्देशिका (कई अन्य फ़ाइलों के साथ) में फ़ाइलों का एक गुच्छा मिला है जिसे मैं स्थानांतरित करना चाहता हूं ।

सौभाग्य से, मैं जिन फ़ाइलों को स्थानांतरित करना चाहता हूं, उनके नाम में एक निश्चित पहचानकर्ता होता है, इसलिए मैं कर सकता हूं ls | grep IDENTIFIER स्थानांतरित करने के लिए फ़ाइलों की सटीक सूची प्राप्त करने के लिए ।

लेकिन, मैं कैसे निष्पादित कर सकता हूं mv file /path/to/dest/folder/ एक बार में, और एक-एक करके नहीं (स्थानांतरित करने के लिए बहुत सारी फाइलें हैं)?

आप उपयोग कर सकते हैं:

mv -t DESTINATION file1 file2 file3

निम्नलिखित भी काम करता है, लेकिन मुझे यकीन नहीं है अगर mv कई बार लागू किया जाता है या नहीं, जैसा कि grep प्रत्येक मैच के लिए एक नई लाइन आउटपुट करेगा:

mv -t DESTINATION  `ls|grep IDENTIFIER`

अगर आप हिलना चाहते हैं ABC-IDENTIFIER-XYZ.ext या IDENTIFIER-XYZ.xml, आप उपयोग कर सकते हैं:

mv *IDENTIFIER* ~/YourPath/

* के लिए एक वाइल्डकार्ड है शून्य या अधिक वर्ण, इसका मतलब है शून्य या अधिक वर्ण, के बाद IDENTIFIER, के बाद शून्य या अधिक वर्ण.

यह उन सभी फाइलों को स्थानांतरित कर देगा जो होते हैंIDENTIFIER आपने निर्दिष्ट किया ।

आप उपयोग कर सकते हैं वाइल्डकार्ड.

उदाहरण के लिए, सभी फ़ाइलों को स्थानांतरित करने के लिए .doc विस्तार:

mv *.doc /path/to/dest/folder/

यह वर्तमान निर्देशिका के तहत सभी दस्तावेज़ फ़ाइल को विशिष्ट गंतव्य पर ले जाएगा ।

संपादित करें

टिप्पणी का जवाब देने के लिए:

लेकिन स्थानांतरित करने के लिए फ़ाइलों की सूची विस्तार द्वारा निर्धारित नहीं है । कुछ फाइलों के नाम हैं: ABC-IDENTIFIER-XYZ.ext और कुछ बस IDENTIFIER-XYZ.ext सभी में अलग-अलग एक्सटेंशन हैं, ज्यादातर xml या properties.

mv *.ext  *.xml *.txt /path/to/dest/folder/

यदि आप मनमानी फ़ाइलों का एक सेट स्थानांतरित करना चाहते हैं (नामों और प्रकारों में कोई सामान्य पैटर्न नहीं) तो आप ऐसा कर सकते हैं जैसा कि श्री राजानंद ने कहा:पहले उस निर्देशिका पर जाएं जिसमें वे फाइलें हैं जिन्हें आप स्थानांतरित करना चाहते हैं

mv file1.ext1 file2.ext2 file3.ext3 /destination/

यदि फ़ाइलें विभिन्न निर्देशिकाओं में बिखरी हुई हैं, तो आपको केवल प्रत्येक फ़ाइल के लिए पथ निर्दिष्ट करना होगा mv कमान।

मैं तुओमाज़ की तकनीक का उपयोग करता हूं, लेकिन थोड़ा संशोधित:

mv file1 file2 file3 -t DESTINATION

मुझे यह याद रखना आसान लगता है और पेंच करना कठिन होता है क्योंकि यह वेनिला एमवी ऑपरेशन के समान ऑर्डर का उपयोग करता है:

mv file1 DESTINATION

यदि फाइलें एक ही डीआईआर में हैं तो आप उपयोग कर सकते हैं

mv /path/to/source/dir/{file1,file2,*.ext1,*.ext2} /path/to/destination/

(उबंटू 16.04 में परीक्षण किया गया)

इस आदेश का प्रयोग करें:

mv `ls|grep IDENTIFIER` /path/to/dest/folder  

हालांकि, एलएस इस तरह के उपयोग के लिए अनुशंसित नहीं है । उपयोग करें खोजें इसके बजाय कमांड ।

find -type f -name "[range]" -exec mv {} target-directory ';'

यह कमांड किसी भी पैटर्न/रेंज के साथ फ़ाइल नामों को लक्ष्य-निर्देशिका में ले जाएगा ।

जैसे।

find -type f -name "file[1-50000]" -exec mv {} target-directory ';'

यह जैसे नामों के साथ फ़ाइलों को स्थानांतरित करेगा file1, file2 ... file50000 को target-directory.

यदि आपके पास स्थानांतरित करने के लिए इतनी सारी फाइलें हैं तो आप वास्तव में इसके लिए बहुत अधिक हो सकते हैं mv कमांड (या अन्य कमांड जैसे rm). मैं उपयोग करने का सुझाव देता हूं xargs फैशन की तरह एक पाश में व्यक्तिगत रूप से प्रत्येक फ़ाइल को स्थानांतरित करने के लिए । चारों ओर जाने का एक तरीका यह है:

ls -1 | grep IDENTIFIER | xargs -i mv {} /path/to/dest/folder/

ls -1 (माइनस वन) सुनिश्चित करता है कि प्रत्येक पंक्ति पर केवल एक फ़ाइल नाम है । यदि आप के लिए छिपा उपनाम है ls आदेश आपके पास एक ही पंक्ति में कई फ़ाइल नाम हो सकते हैं और अनजाने में उस फ़ाइल को स्थानांतरित कर सकते हैं जिसे आपने स्थानांतरित करने का इरादा नहीं किया था ।

सबसे आसान तरीका इस तरह है

mv {file1,file2,file3} DESTINATION

या निर्देशिका

mv {directory1,directory2,directory3} DESTINATION

या दोनों फाइलें और निर्देशिका

mv {file1,file2,file3,directory1,directory2,directory3} DESTINATION

आशा है कि यह मदद करता है