केवल यूनिक्स में फ़ाइलों को कैसे स्थानांतरित किया जाए


16

मैं लिनक्स में एक फोल्डर से केवल प्लेन फाइल्स (डायरेक्टरीज को नहीं) को दूसरे फोल्डर का उपयोग करके कैसे स्थानांतरित कर सकता हूं mv आदेश?

मैंने कोशिश की है mv * ~/, लेकिन यह निर्देशिका सहित सब कुछ नकल की।


आपकी टिप्पणी में एक अतिरिक्त प्रतिबंध का उल्लेख है: कमांड को वर्तमान कार्यशील निर्देशिका से छिपी हुई फ़ाइलों को स्थानांतरित नहीं करना चाहिए। यदि यह सही है, तो क्या आप इस उल्लेख के लिए अपने प्रश्न को संपादित कर सकते हैं? "केवल फ़ाइलें स्थानांतरित करें" हमें लगता है कि "सभी फ़ाइलों को स्थानांतरित करें", जिसमें छिपी हुई फाइलें शामिल हैं।
quack quixote

जवाबों:


24

तुम कोशिश कर सकते हो

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

2
वाह, कोई है जो जानता है कि कैसे उपयोग करना है। पूर्णता के लिए, आपको खोज में-^ [।] * का उपयोग करना चाहिए, अर्थात --- खोजें। -maxdepth 1 -type f -name [^।] * -exec mv {} path \;
chris

5

मैं "सब कुछ के लिए एक हथौड़ा का उपयोग कर रहा हूँ" थोड़े आदमी तो मैं सामान दूसरों के लिए बाहरी कार्यक्रमों का उपयोग करने के लिए बोर्न शेल कार्यक्रमों का उपयोग करता हूं ...

for file in * .* 
do
  test -f "$file" && mv "$file" "$HOME"/
done

कुछ लोग चीजों को कम से कम टाइपिंग में करवाना पसंद करते हैं, लेकिन मैं बहुत जल्दी टाइपिस्ट हूं और मुझे इस तरह का सामान मेरे मस्तिष्क में मिल गया है, इसलिए इसे देखने के बजाय ऐसा करने के लिए बहुत दर्द नहीं है सभी को खोजने और निष्पादित करने के लिए तर्क।

YMMV, हालांकि ...


इसके लिए धन्यवाद मैं इसे आज़माऊंगा। लेकिन मुझे अभी भी दूसरे उत्तर की आवश्यकता है क्योंकि इसकी एक परियोजना के लिए मैं लिनक्स कोर्स कर रहा हूं। बहुत बहुत धन्यवाद

1
इस है आपके प्रश्न का उत्तर एमवी को फाइलों या निर्देशिकाओं या फीफो या अन्य विशेष फाइलों की कोई समझ नहीं है। mv केवल निर्देशिका प्रविष्टियों और इनोड्स को समझता है, और जहाँ तक इसका संबंध है, वे सभी फ़ाइल प्रकार की परवाह किए बिना समान हैं। एमवी को केवल एक विशिष्ट प्रकार की फ़ाइल को स्थानांतरित करने की अनुमति देने के लिए, आपको परीक्षण जैसी कोई चीज़ चाहिए या वह मिल सकती है जो वास्तव में फ़ाइल को देखने के लिए इनोड को देख सके। दूसरे शब्दों में, आपसे एक ट्रिक प्रश्न पूछा जा रहा है यदि आपको इसे करने के लिए कहा जा रहा है केवल एमवी के साथ।
chris

1
और मैं कहता हूं कि एमवी इनोड्स को समझता है केवल क्योंकि यह एक फाइल को एक फाइल सिस्टम से दूसरे में ले जाने में सक्षम है, जो तकनीकी रूप से एक cp है तो एक rm, mv नहीं (जो वास्तव में सिर्फ एक ln तब rm है) हार्डलिंक और निर्देशिका प्रविष्टियाँ देखें।
chris

2
संक्षिप्त: यह एक अच्छा उत्तर है, आपको एमवी कमांड (कम से कम शेल) के अलावा कुछ का उपयोग करना होगा। यह एक बुनियादी के बारे में है क्योंकि यह प्रोग्रामिंग के बिना हो जाता है।
Kyle Brandt

2

@Mereghost बहुत करीब है। यहां मुझे सभी फ़ाइलों (छिपी फ़ाइलों सहित) को स्थानांतरित करने के लिए मिलता है, लेकिन निर्देशिका नहीं

find . -maxdepth 1 -type f -name '*' -exec mv -n {} /destination_path \;

. पता लगाने के बाद आप वर्तमान निर्देशिका फ़ाइलों को स्थानांतरित करना चाहते हैं का स्रोत है। यदि नहीं, तो आदेश को संशोधित किया जा सकता है:

find /source_path -maxdepth 1 -type f -name '*' -exec mv -n {} /dest_path \;

यदि आप केवल नियमित फ़ाइल को स्थानांतरित करना चाहते हैं और छिपी हुई फ़ाइलें नहीं:

find . -maxdepth 1 -type f -name '[!.]*' -exec mv -n {} /dest_path \;

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

find . -maxdepth 1 -type f -name '.*' -exec mv -n {} /dest_path \;

-1

आप पा सकते हैं

find * -maxdepth 1 -type f -exec mv {} ~ \;

हाँ अच्छी तरह से काम किया है लेकिन नहीं 100% यह निर्देशिका और उप निर्देशिका से ~ / स्थान के लिए सभी फ़ाइलों की नकल की। मुझे बस कुछ बहुत ही बुनियादी चीज़ों की ज़रूरत है जो कि फ़ाइलों की छिपी हुई फ़ाइलों को बिना dir से कॉपी किए मैं दूसरे dir में हूँ बस। वैसे भी सलाह के लिए धन्यवाद

यह अधिकतम 1 के रूप में असंभव है।
John T

इसलिए यह छिपी हुई फ़ाइलों की नकल नहीं करेगा।
John T

1
खोज पर वाक्यविन्यास तब मिल जाता है एक निर्देशिका फिर संचालन और चीजों का मिलान करने के लिए विवरण। आमतौर पर कभी भी वाइल्डकार्ड का उपयोग नहीं किया जाता है जैसे कि * इसे ग्लोबिंग से बचाने के बिना * (जैसे / पाथ / टू / डाइरेक्टरी -नाम गू * * -टाइप f से सुरक्षित रखें
chris

1
केवल तभी ठीक से काम करें यदि आप इसे जांचने के लिए एक ही रास्ता सौंपते हैं। आपके उदाहरण में, उदाहरण के लिए, यदि कोई फ़ाइल है जो एक - से शुरू होती है, तो अप्रत्याशित रूप से विस्फोट हो जाएगा। आप हमेशा केवल एक प्रोग्राम को ही डायरेक्ट्री एंट्री रीडिंग करते हैं, और आपके उदाहरण में, आप दो अलग-अलग प्रोग्राम (खोज और शेल) का उपयोग करके थोड़े बेहतर हैं।
chris

-2

mv `ढूंढें ।/sourcedir/* -type f`/destdir


2
यह उन फ़ाइलों के लिए विफल हो जाएगा, जिनके नाम में व्हाट्सएप है। फ़ाइल नाम प्रिंट करने वाले आदेशों के आउटपुट को कभी भी पार्स नहीं किया जाना चाहिए जब तक कि यह गारंटी नहीं दी जा सकती है कि यह ठीक से सीमांकित है। देख आपको ls के आउटपुट को पार्स क्यों नहीं करना चाहिए (1) मुख्य विचार के लिए। का उपयोग करते हुए find की -exec विकल्प समस्या से बचने का सबसे अच्छा तरीका है।
slhck
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.