फ़ोल्डर सामग्री को एक स्तर तक ले जाएं


127

मेरे पास एक निर्देशिका है जो अनपैक्ड है, लेकिन एक फ़ोल्डर में है। मैं सामग्री को एक स्तर तक कैसे स्थानांतरित कर सकता हूं? मैं SSH के माध्यम से CentOS तक पहुँच रहा हूँ।

जवाबों:


189

'Myfolder' नाम के फोल्डर के साथ और फाइल पदानुक्रम में एक स्तर ऊपर (वह बिंदु जिसे आप इसे रखना चाहते हैं) कमांड होगा:

mv myfolder/* .

उदाहरण के लिए डेटा में किया गया था, तो /home/myuser/myfolderसे तो /home/myuser/कमांड चलाएँ।


35
आपको संग्रह को डॉट-फ़ाइलों से सम्‍मिलित .*नहीं करना होगा *। इसके अलावा अंतिम विलोपन फ़ोल्डर को हटाने के लिए `o & rmdir myfolder` को अंत o में जोड़ें। यह सहेज रहा है क्योंकि यह केवल तभी चलेगा जब mv सफलता देता है और क्योंकि rmdir एक गैर-रिक्त निर्देशिका को नहीं निकालेगा।
कालेब

पर अच्छी बात है .*। मूल फ़ोल्डर को हटाना दोनों तुच्छ है और ऐसा नहीं पूछा जाता है ताकि हम ओपी को उसके / उसके साथ सौदा करने दें।
रुडू

1
@Caleb यह दोनों लिखने के लिए संभव है *और .*एक लाइन में? बस जिज्ञासा
रिचर्ड

2
@ रिचार्ड हाँ, यह है। mvLAST तर्क को छोड़कर सभी के लिए तर्क स्रोत होंगे, जिन्हें आगे बढ़ने के लिए लक्ष्य होना चाहिए (और कई स्रोतों के मामले में, एक फ़ोल्डर होने की आवश्यकता है)।
कालेब

1
मैं बैश हो रहा हूं:/bin/mv: Argument list too long
ड्रैगोस्रसपरकोल

26

बस इसे स्पष्ट करने के लिए, ऊपर दिए गए Rudu के उत्तर और टिप्पणियों से लिया गया।

यदि आपको सभी सामग्रियों को स्थानांतरित करने की आवश्यकता है, तो एक के साथ शुरू होने वाली फ़ाइलों को शामिल करना। (जैसे .htaccess, .git, आदि), आपको अपने कमांड में * और * दोनों को शामिल करने की आवश्यकता है। इस तरह:

 mv subfolder/* subfolder/.* .

वह सबफ़ोल्डर की सामग्री को आपके वर्तमान फ़ोल्डर में ले जाएगा। अंतिम "" से पहले स्थान पर ध्यान दें।


यह काम करता है, लेकिन मुझे मिलता है mv: rename fake/. to ./.: Invalid argumentऔरmv: rename fake/.. to ./..: Invalid argument
मैस्लो

16

यह निम्नलिखित विधियों से संभव है:

  • का उपयोग कर rsync:

    rsync -vua --delete-after foo/ .
  • उपयोग करना cpऔर rmdir:

    cp -vaR foo/. . && rmdir foo/
  • उपयोग करना mv( dotglobसक्षम विकल्प के साथ ):

    shopt -s dotglob # Includes filenames beginning with a dot.
    mv -- foo/* .    # Where foo/ is the folder consisting the files.
    shopt -u dotglob # Disables previously enabled dotglob option.
    

    foo/आपका फ़ोल्डर कहां है जिसकी सामग्री को एक स्तर ऊपर ले जाना है।

    देखें: help shoptऔर man bash

  • का उपयोग कर mv(जैसा कि यहाँ सुझाव दिया गया है ):

    mv foo/* foo/.[^.]* . && rmdir foo/

    नोट: यह नामक एक फ़ाइल याद आती है foo/..bar..

    नोट: POSIX गोले के लिए, आपको चाहिए [!.]


क्या rsync स्विच कर रहे हैं -v, -u, -aऔर -rकर? AFAICT, -vवर्बोज़ है, जो बस rsync प्रिंट को अधिक जानकारी देता है। -uअद्यतन का मतलब है - केवल एक फाइल कॉपी करें यदि यह नया है। यह प्रासंगिक नहीं लगता है। -aसंग्रह का मतलब है। जो फ़ाइल के स्वामी और अनुमतियों को कॉपी करेगा, और सिंक को पुनरावर्ती बना देगा। -rपुनरावर्ती का मतलब है, लेकिन यह पहले से ही कवर किया गया है -a
rjmunro

-uजब आप पहले से ही (विशेष रूप से धीमे भंडारण उपकरणों के लिए) चल रहे डेटा का अतिरिक्त समय खर्च नहीं करना चाहते हैं तो उपयोगी है। जैसा कि आपने उल्लेख किया है -r, मैंने इसे हटा दिया है -a
केनोरब

1
mv foo/* foo/.[^.]* .foo/..bar..मिसाल के तौर पर बुलाए जाने वाली एक फाइल को मिस करेगा । ध्यान दें कि POSIX गोले के लिए, आपको चाहिए [!.]
स्टीफन चेज़लस

यह उल्लेख किया जाना चाहिए, कि rsync -vua --delete-after foo/ .वर्तमान निर्देशिका में पहले से मौजूद हर चीज को हटा सकता है।
डेविड

7

सिर्फ एक mv कमांड जारी करें

mv (directory)/* .

यदि आप निर्देशिका हटाना चाहते हैं तो जोड़ें

rm -rf (directory)

मान लिया गया कि आप (निर्देशिका) की मूल निर्देशिका में हैं

यदि आप (डायरेक्टरी) अंदर हैं तो

mv * ../

13
अतिरिक्त सुरक्षा टिप: जब आप जानते हैं कि किसी निर्देशिका को हटाने के लिए खाली होना चाहिए, rmdirशिकायत करता है और बाहर निकलता है यदि निर्देशिका खाली नहीं है, rm -rतो इसके बजाय उसने इसे और इसकी सभी सामग्रियों को हटा दिया है। (यह एक पोक-योक है ।)
अंको

महान बिंदु! मैं ऐसा नहीं करने के लिए एक कारण के बारे में सोच नहीं सकता।
मार्क लालोर

@MarkLalor एक कारण छिपी हुई फ़ाइलों की उपस्थिति हो सकती है, जैसे macOS में सर्वव्यापी .DS_storemvऊपर का आदेश उन (बिना dotglobसेट) को स्थानांतरित नहीं करेगा ।
आखेल

0

एक साझा सर्वर पर आप में से कुछ के लिए आपको इस तरह से कुछ का उपयोग करना होगा

फ़ाइलों को स्थानांतरित करने के लिए

mv -v ~/public_html/public_html/* ~/public_html/

फाइलों को कॉपी करने के लिए

cp -a ~/public_html/public_html/* ~/public_html/


2
उपरोक्त प्रश्न सामग्री की नकल न करने के बारे में पूछता है। यह सबफ़ोल्डर में ओरिजिनल को छोड़कर फाइलों को डुप्लिकेट करेगा। "साझा" सर्वर होने के नाते या वास्तव में इससे कोई लेना-देना नहीं है।
कालेब

1
आपका अधिकार और यहाँ इसका जवाब है ...
रिकार्डो हॉक

2
अपने संपादित करें: यह कैसे अलग है कि पहले से ही उत्कीर्ण जवाब है ? और "साझा सर्वर" का इससे क्या लेना-देना है? कृपया इन वस्तुओं की व्याख्या करने के लिए संपादित करें यदि यह एक उपयोगी योगदान होने वाला है जो पहले से ही यहाँ पर मूल्य जोड़ता है।
कालेब

1
मैं साझा सर्वर के बारे में असहमत हूं, जिसका उससे कोई लेना-देना नहीं है। जिस तरह से "दिर" में प्रवेश किया जाता है वह एक अंतर की दुनिया बना देता है ..
रिकार्डो हॉक

1
यार तुम इतने पागल क्यों हो? ... वाह .. मैं तो बस थोड़ा सा ज्ञान बांट रहा था। हम सभी अलग-अलग तरह से समझते हैं और अलग-अलग तकनीकी समस्याओं का सामना करते हैं ... अपने आप को एक अच्छा दिन कालेब है ..
रिकार्डो हॉक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.