उस डायरेक्टरी में सभी फाइलों को एक डायरेक्टरी में ले जाने के लिए स्निप करें


14

मेरे पास बहुत सारी फाइलों और निर्देशिकाओं के साथ एक निर्देशिका है। इसे ठीक करने के लिए, मैं उन सभी फाइलों को एक निर्देशिका में रखने जा रहा हूं, इसलिए मैं कुछ ऐसा करने जा रहा हूं:

$ ls | wc -l
123
$ mkdir new_directory
$ mv * ./new_directory

क्योंकि तब इसे स्थानांतरित करने की कोशिश करेंगे हालांकि स्पष्ट रूप से काम नहीं करेगा कि new_directoryमें new_directory। क्या कोई सरल तरीका है जो मुझे एक लाइन में चाहिए, मेरे बिना उस निर्देशिका में सभी फ़ाइलों और निर्देशिकाओं को कॉपी और पेस्ट करना है?


3
यह काम करता है, यह सिर्फ एक त्रुटि संदेश प्रिंट करता है जो अपने आप में new_directory को स्थानांतरित करने में असमर्थ है।
कैस

जवाबों:


18

तुम्हारी

mv * ./new_directory
कमांड वास्तव में काम करेगा; यह सिर्फ एक चेतावनी छापेगा कि यह उस निर्देशिका को अपने आप में स्थानांतरित नहीं कर सकता है।


इसके साथ 'केवल' समस्या यह है कि यदि कमांड का कुल विस्तार बहुत लंबा हो जाता है (यानी बहुत सारी फाइलें, बहुत लंबे नाम) यह अब काम नहीं करेगा।
नील्स बसजेस

एक साइड नोट के रूप में, यदि आप ऐसा करने जा रहे हैं, तो आपको ध्वज का git mvउपयोग करना चाहिए -k, क्योंकि यह डिफ़ॉल्ट रूप से विफल हो जाएगा, न कि केवल एक चेतावनी के रूप में। तो आपको करने की आवश्यकता होगी git mv -k * ./new_dir
युवल ए

11

एक तेज और गंदे ऑनलाइनर।

mv `ls -A | grep -v new_directory` ./new_directory

1
काम नहीं करेगा: एक प्लेन ls डॉटफाइल्स नहीं दिखाएगा।
9

बहुत अच्छी बात है। फिक्स्ड है कि एक ए के साथ।

2
इसलिए अपने आप को (मूल प्रश्न) new_directory करने की कोशिश करने के बजाय अब आप स्थानांतरित करने की कोशिश कर रहे हैं। और .. new_directory में।
नील्स बैजेस

2
प्रतिक्रिया नील्स के लिए धन्यवाद। यह एक ऊपरी के साथ फिक्स्ड जो हटाता है। और .. निर्देशिका लिस्टिंग से।

8

यदि आप केवल फाइलें खोज रहे हैं (यानी निर्देशिका नहीं), तो

find . -type f -maxdepth 1 -exec mv {} ./new_directory/ \;

सबसे पोर्टेबल समाधान है। गति के लिए, आपको -r0 और -0 के साथ, और xargs का पता लगाना चाहिए, लेकिन अगर आपको GNU मिल गया है और xargs।


3
एक काफी हालिया GNU खोज का उपयोग करके, आप \ के बजाय \ + का भी उपयोग कर सकते हैं; एमवी की संख्या कम करने के लिए हम बना रहे हैं।
9

यदि आपको GNU मिल गया है, तो आप xargs का उपयोग करने के लिए भी हैं, जो कि ऐसा ही करेगा, और -p ध्वज के साथ एक ही समय में कई mvs चलाने देगा।
सियान

का शांत उपयोग find- हालांकि मैं निश्चित रूप से उन प्रणालियों पर रहा हूं, जिनमें एक नहीं, दुख की बात है :(
वॉरेन

वास्तव में? खोज (afaik) SUS में निर्दिष्ट है, इसलिए इसमें सब कुछ होना चाहिए। एकमात्र मुद्दा यह है कि क्या यह जीएनयू खोज है (जिसमें बहुत अच्छे अच्छे विकल्प हैं) या नियमित रूप से मिलते हैं।
सियान


6

समय है कि मैं इस समस्या है, मैं निम्नलिखित में से एक किया है:

$ mkdir ../new-directory
$ mv * ../new-directory/
$ mv ../new-directory .

या

$ mkdir .new-directory
$ mv * .new-directory/
$ mv .new-directory new-directory

दूसरा रूप वाइल्डकार्ड स्किपिंग फ़ाइलनामों का लाभ उठाता है जो 'से शुरू होते हैं।'


मैं भूल गया वाइल्ड-कार्ड स्किप की गई बिंदीदार फ़ाइलें; याद दिलाने के लिए शुक्रिया ! :)
एनेमॉन्ज

2

किस बारे में:

cd ..
mv old_dir new_directory
mkdir old_dir
mv new_directory old_dir

IOW, नई निर्देशिका में सामग्री को स्थानांतरित न करें, लेकिन इस निर्देशिका को एक नए के अंदर रखें।


1

@ रेम्ब्रेन के उत्तर के समान फैशन में (हालांकि एक-लाइनर नहीं):

for FN in *
do
    if [ "<new_dir>" != $FN ] then
        mv $FN <new_dir>
done

यह 100% पोर्टेबल होना चाहिए - भले ही findआपके सिस्टम से उदास रूप से अनुपस्थित हो।


एकल यूनिक्स कल्पना में आवश्यक है। जैसे, यह कभी भी अनुपस्थित नहीं होना चाहिए (ऐसा नहीं है कि आप इसके साथ कुछ नहीं बना सकते हैं। लेकिन मुझे लगता है कि इसे प्रयास की एक भयावह मात्रा की आवश्यकता होगी, और किसी भी विक्रेता प्रणाली की कमी नहीं होगी)
सियान

हो सकता है कि यह कुछ हाइपर-पैरानॉइड सीसडमिन यॉइंकिंग फाउंड्यूटिल्स या इसके समकक्ष हो? यकीन नहीं है, लेकिन मुझे पता है कि मैं बॉक्सन में चला गया हूं कि यह नहीं है :(
वॉरेन

1

मेरे सुझाव: जैसा कि दूसरों ने कहा है

mv * ./new_directory

काम मिलेगा IFF कुल विस्तार काफी कम है।

अन्य बुद्धिमान आप इसे आज़मा सकते हैं जो बहुत बड़ी संख्या में फ़ाइलों की संख्या को मापता है:

find . -type f -maxdepth 1 | xargs -s100000 echo | xargs -iXXX mv XXX new_directory

व्याख्या

  1. सभी फाइलों को सूचीबद्ध करें।
  2. सभी फ़ाइलनामों को अधिकतम 100000 वर्णों के समूह में बाँटें।
  3. प्रति एकल mv कमांड का निर्माण करें।

टूट जाता है अगर आप अपने फ़ाइल नामों में कोई रिक्त स्थान मिला है
Cian

आप सही हे। तो मुझे लगता है कि यह -00 और -0 ध्वज को ठीक करने के साथ संवर्धित किया जाना चाहिए।
नील्स बसजेस

मैं के साथ की कोशिश की है -print0और -0और यह अभी भी टूट जाता है।
क्रिस्टियन सियुपिटु

खोज: चेतावनी: आपने गैर-विकल्प तर्क के बाद -maxdepth विकल्प निर्दिष्ट किया है -प्रकार, लेकिन विकल्प स्थितीय नहीं हैं (-maxdepth निर्दिष्ट किए गए परीक्षणों के साथ-साथ इसके बाद निर्दिष्ट किए गए पहले को प्रभावित करता है)। कृपया अन्य तर्कों से पहले विकल्प निर्दिष्ट करें।
क्रिस्टियन सियुपिटु


-1

त्रुटि संदेश से बचने और इसे सरल रखने के लिए:

mv *.* ./new_Folder

एक ही काम करेंगे लेकिन त्रुटि संदेश से बचें (जब तक कि आपके फ़ोल्डर के नाम में डॉट्स नहीं हैं मुझे लगता है)।

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