उपनिर्देशिकाओं से सभी फ़ाइलों को वर्तमान निर्देशिका में स्थानांतरित करें?


14

मैं सभी उपनिर्देशिकाओं में निहित फ़ाइलों को वर्तमान निर्देशिका में कैसे स्थानांतरित कर सकता हूं, और फिर खाली उपनिर्देशिकाओं को हटा सकता हूं?

मुझे यह प्रश्न मिला , लेकिन इसके उत्तर को स्वीकार करना:

mv * .

काम नहीं किया; मुझे बहुत सी चेतावनियाँ मिलीं जैसे कि:

mv: wil and ./wil are identical

उपनिर्देशिकाओं में निहित फ़ाइलों में अद्वितीय नाम हैं।

जवाबों:


23

आप -mindepthविकल्प का उपयोग भी कर सकते हैं :

find . -type f -mindepth 2 -exec mv -i -- {} . \;

(साथ में -maxdepthआप पदानुक्रम के स्तर को भी सीमित कर सकते हैं जहाँ से फाइलों को इकट्ठा करना है।)

ओवरराइटिंग फ़ाइलों से पहले पूछने के mv -iलिए मैंने ("इंटरैक्टिव") का mvउपयोग किया। बहुत सारी उपनिर्देशिकाओं के साथ, आपके नाम के बारे में चेतावनी दी जा सकती है।

--विकल्प विकल्प प्रसंस्करण बंद हो जाता है, तो mvएक हाइफन के साथ शुरू फ़ाइल नाम से उलझन में नहीं होती है।

खाली उपनिर्देशिकाओं के पूरे समूह को साफ करें

find . -depth -mindepth 1 -type d -empty -exec rmdir {} \;

क्या फाइलों को अधिलेखित न करने के लिए सवाल को छोड़ देने का एक तरीका यह भी है कि उन्हें अधिलेखित न करें?
फाइलर

2
एमवी के विकल्प -n, --no-clobber:: किसी मौजूदा फ़ाइल को अधिलेखित न करें। आप में -b, --backupभी रुचि हो सकती है।
फ्लोरियन जेन

5

इसे इस्तेमाल करे:

find ./*/* -type f -print0 | xargs -0 -J % mv % .

अधिक जानकारी: अकेले ढूंढने की कोशिश करें, यह आपको उन सभी फाइलों के साथ एक सूची देनी चाहिए जिन्हें आप स्थानांतरित करना चाहते हैं (बाहर छोड़ें -print0)। उदाहरण:

probe:test trurl$ find ./*/* -type f
./test_s/test_s_s/testf4
./test_s/test_s_s/testf5
./test_s/testf1
./test_s/testf2
./test_s/testf3
./test_s2/testf6
./test_s2/testf7

के साथ -print0और xargsआप अब निष्पादित किए जाने वाले कथनों की एक सूची बना रहे हैं। -J %झंडा मतलब है, सूची तत्व यहाँ डालने, तो mv $FILE .पाया कि हर फ़ाइल के लिए मार डाला है।

उपरोक्त BSD xargs के लिए काम कर रहा है। यदि आप GNU- संस्करण (लिनक्स) का उपयोग कर रहे हैं तो -I %इसके बजाय-J %



0
mv */* .

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

यदि आपको कुछ सफाई की आवश्यकता है, तो आप उपयोग कर सकते हैं

find . -type d -empty -delete

यह सभी खाली उपनिर्देशिकाओं को हटा देगा।


-2

1 त्वरित ट्रिक, केवल तभी काम करती है जब आपकी फ़ाइलों में एक्सटेंशन (डॉट के साथ) हों:

mv *.* subdir/
mv .* subdir/

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