मैं ubuntu के दूसरे फ़ोल्डर में नेस्टेड उपनिर्देशिकाओं से फ़ाइलों को कैसे स्थानांतरित करूं? (कई सबफ़ोल्डर्स को हटाने की कोशिश)


36

मैं फ़ाइलों और निर्देशिकाओं को किसी अन्य फ़ोल्डर / पैरेंट फ़ोल्डर में कैसे स्थानांतरित करूं ?

मेरे पास एक फ़ोल्डर संरचना है जो बहुत बदसूरत है, कुछ के साथ। एमपी 3 फाइलें एक उप-फ़ोल्डर में 6 स्तरों को दफन करती हैं।

मैं सभी फ़ाइलों के साथ (ज्यादातर .mp3 लेकिन सभी नहीं) को एक निर्देशिका में समाप्त करना चाहता हूं, जिसमें कोई सबडायरेक्टरी नहीं है, जो उबंटू का उपयोग कर रही है।

मदद?

जवाबों:


48

आस्कुबंटू-क्यूए में एक शानदार जवाब है

ऐसा करने के लिए, एक टर्मिनल खोलें और इस कमांड को निष्पादित करें:

mv  -v ~/Downloads/* ~/Videos/

यह डाउनलोड फ़ोल्डर से वीडियो फ़ोल्डर में सभी फ़ाइलों और फ़ोल्डरों को स्थानांतरित करेगा।


सभी फ़ाइलों को स्थानांतरित करने के लिए, लेकिन फ़ोल्डर नहीं:

लेकिन, यदि आप डाउनलोड फ़ोल्डर से वीडियो फ़ोल्डर में सभी फ़ाइलों (लेकिन फ़ोल्डर्स नहीं) को स्थानांतरित करने के लिए इच्छुक हैं, तो इस कमांड का उपयोग करें

find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos

केवल डाउनलोड फ़ोल्डर से फ़ाइलें स्थानांतरित करने के लिए, लेकिन उप-फ़ोल्डर से नहीं:

यदि आप डाउनलोड फ़ोल्डर से सभी फ़ाइलों को स्थानांतरित करना चाहते हैं, लेकिन डाउनलोड फ़ोल्डर में फ़ोल्डर्स के भीतर कोई भी फाइल नहीं है, तो इस कमांड का उपयोग करें:

find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos

यहां, -maxdepthविकल्प यह निर्दिष्ट 1करता है कि खोज कमांड में निर्दिष्ट केवल निर्देशिका , साधनों को कितना गहरा प्रयास करना चाहिए । आप का उपयोग कर कोशिश कर सकते हैं 2, 3भी परीक्षण करने के लिए।

विस्तृत विवरण के लिए उबंटू खोज मेनपेज देखें ।

स्रोत


अगर मैं जो करना चाहता हूं, वह सभी फाइलों को फ़ोल्डर में कॉपी करना है तो क्या मुझे केवल एमवी को सीपीपी में बदलना होगा? मैं linux में नया हूँ
Neoryder

13

समाधान

find /src/dir -type f -exec mv --backup=numbered -t /dst/dir {} +

कमांड सभी नियमित फाइलों को /src/dir(सभी उपनिर्देशिकाओं सहित) ढूंढेगा और उन्हें /dst/dirकमांड के उपयोग से स्थानांतरित करेगा mv। बस निर्देशिकाओं को अपने द्वारा बदलें। समान नाम वाली फाइलें अपने आप नाम बदल जाएंगी।

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

यदि आप केवल एमपी 3 फ़ाइलों को स्थानांतरित करना चाहते हैं, -iname "*.mp3"तो findउसके बाद कमांड में विकल्प जोड़ें -type f

उत्तर की तुलना c0dev द्वारा करें

C0dev के उत्तर में केवल दूसरा कमांड प्रश्न का उत्तर देता है। नीचे इस उत्तर की तुलना कैसे की गई है। अंक 3. और 4. को अन्य उत्तर में उसी तरह हल किया जा सकता है जैसे कि यहां।

  1. mvसमाधान को छोड़कर -exec +अतिरिक्त आदेश की तरह कॉल करने की आवश्यकता नहीं है xargsया parallelदो बार फ़ाइल नामों को सौंपना है।
  2. अन्य उत्तर चुपचाप उन फ़ाइलों को अधिलेखित कर देगा जिनके पास समान नाम है। यहां विकल्प के लिए फाइलों का नाम स्वतः ही बदल दिया जाएगा --backup=numbered। दुर्भाग्य से इन बैकअप जैसे प्रत्यय के साथ ~3~डिफ़ॉल्ट रूप से अधिकांश फ़ाइल प्रबंधन में छिपा होगा। दुर्भाग्य से mvप्रत्यय को बदलने की अनुमति नहीं है लेकिन इसे अतिरिक्त कमांड द्वारा आसानी से पोस्ट-प्रोसेस किया जा सकता है। यह एक GNU एक्सटेंशन है।
  3. के विपरीत -print0 -exec command {} +IEEE Std 1003.1 (इसे POSIX), आईएसओ / आईईसी 9945 और एकल यूनिक्स विशिष्टता मानकों का एक हिस्सा है। इस प्रकार यह अधिक पोर्टेबल होना चाहिए। देखें IEEE Std 1003.1, 2004 संस्करण , IEEE Std 1003.1, 2013 संस्करण और 0,000,243: "लगता है" के लिए -print0 जोड़े । लेकिन वैसे भी आवश्यक -tस्विच mvएक GNU एक्सटेंशन है इसलिए पूरा कमांड POSIX सिस्टम के बीच पोर्टेबल नहीं है।

नोट: मामले में findके साथ शुरू रास्तों का उत्पादन करने में सक्षम होगा -(मैं के किसी भी तरह के कार्यान्वयन के बारे में पता नहीं है find। इस समय) {}अंत के विकल्प सूचक से पहले किया जाना चाहिए: --


त्रुटि: खोजें: लापता तर्क `-सेक्स '
क्रिस

@ क्रिस: आप सही हैं, ऐसा लगता है कि {}अंतिम तर्क के रूप में होना चाहिए। सही किया।
पाबौक

@ क्रिस: क्या यह काम करता है जैसे आप चाहते हैं? यदि हाँ, तो आप शायद इसका उत्तर स्वीकार कर सकते हैं, इसलिए आपका प्रश्न "नहीं-हल" के रूप में नहीं दिखता है।
पाबौक

यह वही है जो मैं चला रहा हूं, और निर्देशिका-नहीं-मिली त्रुटियां:
क्रिस

मैं क्या चला रहा हूँ: clstal @ clap: ~ $ ls 1st script.R Firefox_wallpaper.png part1vidproj zotero pdf मैनेजर डेस्कटॉप mozilla.pdf चित्र दस्तावेज़ मूल वीडियो clstal @ clap / गंतव्य / निर्देशिका {} + खोजें: `/ स्रोत / निर्देशिका ': ऐसी कोई फ़ाइल या निर्देशिका नहीं
क्रिस

2

दुर्भाग्य से, चिह्नित समाधान पर टिप्पणी करने के लिए मेरे पास पर्याप्त उच्च प्रतिष्ठा नहीं है। हालाँकि, मैं एक मुद्दे के बारे में दूसरों को सावधान करना चाहता था, जिसमें मैं भाग गया था। यह काफी शौकिया है; हालाँकि, जब आप कई काम कर रहे होते हैं तो यह पहली बार में समझ में नहीं आता है। उम्मीद है, यह दूसरों की मदद करेगा।

संकट

कमांड शुरू करने के बाद निम्नलिखित संदेश के बदलाव प्रदान किए गए। कमांड तब कई फाइलें बनाता है।

mv: `/data/share/docs/src/dir/filename.ext' and `/data/share/docs/src/dst/filename.ext' are the same file

कारण

का /srcमाता-पिता है /dst(जैसे /src/../dst/)।

समाधान

जबकि एक बेहतर समाधान हो सकता है, मैं बस फाइलों को मेरे बाहर एक अस्थायी निर्देशिका में स्थानांतरित कर देता हूं /srcऔर फिर उन्हें /src/../dstनिर्देशिका में वापस लाने के लिए कमांड देता हूं जो मैं चाहता था कि वे समाप्त हो जाएं।


2

मेरा वन-लाइनर - यह मैक पर काम करता है, लेकिन इसे किसी भी * निक्स पर भी करना चाहिए। मूल निर्देशिका से प्रारंभ करें।

# Move files to parent and delete empty folders
find . -not -type d -print0 | xargs -0J % mv -f % . ; find . -type d -depth -print0 | xargs -0 rm -rf

पहला भाग सभी सबफ़ोल्डर से सब कुछ वास्तविक फ़ोल्डर में ले जाता है जहाँ से आप कमांड को स्टैर्ट करते हैं; दूसरे भाग की जाँच करता है कि क्या सबडिरेस खाली हैं (उन्हें अब :-) होना चाहिए और उन्हें हटा देना चाहिए ताकि आपको सब कुछ मिल जाए।


(1) कृपया बताएं कि आपका उत्तर क्या करता है, और किसी भी फायदे के अन्य उत्तर (जो बहुत समान हैं)। कृपया टिप्पणियों में प्रतिक्रिया न दें;  इसे स्पष्ट और अधिक पूर्ण बनाने के लिए अपना उत्तर संपादित करें। (2) ध्यान दें कि -notऑपरेटर गैर-मानक है, इसलिए आपकी कमांड दूसरों की तुलना में कम पोर्टेबल है।
स्कॉट

खोजो। -नोट -प्रकार d -print0 | xargs -0J% mv -f%। ; खोजो। -प्रकार d -depth -print0 | xargs -0 rm -rf मैंने इस कमांड को एक फोल्डर में चलाया और उसने सब फोल्डर को डिलीट कर दिया, जिस फोल्डर में मैं था, और फिर पैरेंट फोल्डर में चला गया। सौभाग्य से मैं अपने फ़ाइल प्रबंधक को देख रहा था और कमांड को रोकने में कामयाब रहा और यह एक परीक्षण फ़ोल्डर में चलाया गया था।
विल

1

टर्मिनल खोलें, फ़ाइलों के साथ फ़ोल्डर्स के अपने फ़ोल्डर में सीडी और find . -mindepth 2 -type f -print -exec mv {} . \; इन उप-निर्देशिकाओं से सभी फ़ाइलों को चालू एक में स्थानांतरित करने के लिए चलाएं ।

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