बड़ी मात्रा में फ़ाइलें चल रही हैं (~ 100 000)


13

मैं उन फ़ोल्डरों के साथ काम करता हूं जिनमें बहुत सारी फाइलें होती हैं, जैसे 100 000 या प्रति फ़ोल्डर 1 000 000 फाइलें। जब मैं किसी फ़ोल्डर की सामग्री को दूसरे में ले जाने का प्रयास करता हूं, तो मेरा कंप्यूटर हमेशा अटक जाता है। यहां तक ​​कि जब प्रक्रिया समाप्त हो जाती है, तब भी मैं किसी भी फ़ोल्डर की सामग्री नहीं देख सकता क्योंकि नॉटिलस पूरी तरह से जमी हुई है और मुझे अपने कंप्यूटर को पुनरारंभ करने के लिए मजबूर करना होगा। मैंने देखा कि ऐसा तब भी होता है जब मैं 10 000 फाइलों की तरह बढ़ने की कोशिश करता हूं।

क्या इन नंबरों के साथ काम करने पर मेरे कंप्यूटर की समस्या सामान्य है या सामान्य है?

इस फाइल ट्रांसफर को करने का कोई स्मार्ट तरीका?


3
टर्मिनल का उपयोग करने के बारे में क्या ( cp -R SRC/ DEST/)
UniversallyUniqueID

2
@ भारद्वाजराजू: फाइलों के आधार पर cp -a बेहतर हो सकता है क्योंकि यह मालिकों, टाइमस्टैम्प और अनुमतियों को संरक्षित करता है। मैं rsync की भी सिफारिश करूंगा क्योंकि यह स्थानान्तरण और केवल उन प्रतियों को सत्यापित कर सकता है जो पहले से मौजूद नहीं हैं।
माइकल

अद्यतन: gvfs-copy( gvfs-binपैकेज से) की तुलना में तेज हो सकता है cp
यूनिवर्सिटीलीयूनिड

आपके पास एक के बजाय दो प्रश्न हैं। कृपया निर्देशों के लिए पृष्ठ को कैसे पूछें की जाँच करें
लुइस डी सूसा

जवाबों:


19

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

इसे पूरा करने के कई अलग-अलग तरीके हैं, लेकिन निम्नलिखित ने मेरे सिस्टम पर जल्दी, सुरक्षित और कुशलता से काम किया:

find . -maxdepth 1 -type f -print0 | xargs -0 mv -t <destination>

इस कमांड के लिए कुछ स्पष्टीकरण:

  1. आपकी इनपुट निर्देशिका 'है।' चरित्र और इस विशेष कमांड के लिए आपको उस निर्देशिका में होना चाहिए
  2. आपका आउटपुट डायरेक्टरी <destination>मेरे उदाहरण में है। अपनी आवश्यकताओं के अनुरूप और ब्रैकेट्स को छोड़ने के लिए इसे स्पष्ट रूप से संशोधित करें।
  3. यह सिंटैक्स एक बोनस के रूप में रिक्त स्थान के साथ फ़ाइल नाम की अनुमति देता है :)

अंतहीन क्रमपरिवर्तन संभव है लेकिन यह अच्छी तरह से और बहुत अधिक कुशलता से काम करना चाहिए । उदाहरण के लिए एक क्रमपरिवर्तन: यदि आप केवल पीडीएफ फाइलें ही चला सकते हैं जो आप चला सकते हैं:

find . -iname "*.pdf" -maxdepth 1 -type f -print0 | xargs -0 mv -t <destination>

xargsविशेष रूप से इतनी बड़ी संख्या में फ़ाइलों की आवाजाही के साथ कई संभावनाओं को खोलता है। कई, कई संभावनाएँ…।

संभावित समस्याएं:

इन विचारों के लिए नीचे टिप्पणी करने वालों को धन्यवाद देने के लिए कम से कम 2 संभावित नुकसान हैं:

  1. आपकी गंतव्य निर्देशिका भ्रष्ट हो सकती है, बाद में अप्राप्य स्थान पर, गलत तरीके से रखी गई आदि mvअब भी फ़ाइलों को वहां स्थानांतरित कर देगी! यहां सावधान रहें ...
  2. यदि -tविकल्प ( --target-directory) गायब है और गंतव्य फ़ोल्डर वास्तव में एक फ़ाइल है, तो आप एक फ़ाइल को स्थानांतरित करेंगे और बाकी पर विफल रहेंगे। mv2 का उपयोग करता है: गंतव्य के लिए स्रोत का नाम बदलें या स्रोत को निर्देशिका में स्थानांतरित करें । फिर से सावधान ...

2
बस नहीं करेंगे find . -maxdepth 1 -type f -exec mv -t test {} +?
मूरू

@ ममरू: इसके लिए धन्यवाद, मैं एक्स्ट्रसियस -name...टुकड़े की छंटनी कर चुका हूं, लेकिन मैंने xargsजगह छोड़ दी है।
andrew.46

2
मुझे नहीं पता ... जबकि कमान स्पष्ट रूप से सही है क्योंकि यह खड़ा है, मैं पूरी तरह से थोड़ा बहुत त्रुटि-प्रवणता पर विचार करूंगा। (क्या होगा यदि आप, उदाहरण के लिए, -tध्वज को शामिल करना भूल जाते हैं ? मुझे लगता है कि सभी फाइलें नामक एक एकल फ़ाइल को "स्थानांतरित" किया जाएगा test, जिसके परिणामस्वरूप आपकी सभी फ़ाइलों को छोड़कर एक को खो दिया जाएगा।) मुझे लगता है कि मैं rsyncइसके बाद पसंद करूंगा । अगर सब सही हो गया है, a rm। हालांकि, मैं ऐसे परिदृश्यों की कल्पना कर सकता हूं जहां इस तरह की जांच को स्वचालित नहीं किया जा सकता है।
जॉस

@Jos: धन्यवाद, मैंने इस संभावना का वर्णन करते हुए एक पाद लेख जोड़ा है। rsync उत्तर के रूप में लिखा गया एक उदाहरण देखकर अच्छा लगा ?
andrew.46

लिनक्स अत्यंत लंबी तर्क सूचियों का समर्थन करता है, इसलिए आप शायद ऐसा कर सकते हैं mv dir1/* dir2, और केवल इस बात का सहारा लेते हैं find -execकि क्या समस्या है, या यदि आपको अपने ग्लोब के साथ मेल खाने वाले फ़ोल्डरों से बचने की आवश्यकता है। (हालांकि आपके नामकरण सम्मेलनों के आधार पर, अक्सर *.*अधिकांश फ़ाइलों से मेल खाएंगे , लेकिन अधिकांश निर्देशिकाओं से नहीं, क्योंकि यह .extensionफाइलों पर आम है, और सामान्य .नाम निर्देशिका में नहीं है )
पीटर कॉर्ड्स

4

मेरे पास पहले भी ऐसा ही अनुभव था, बड़ी संख्या में फाइलों के साथ काम करना सामान्य बात है। मेरे पास पीडीएफ डेटा-शीट (इलेक्ट्रॉनिक भागों) का एक बड़ा संग्रह था।

GUI उपकरण कुछ फ़ाइल विवरण और मेटा डेटा (चिह्न / थंबनेल, आकार, ...) की जांच करते हैं, यह इस तरह के मामले में एक बड़ी बात होगी। यहां तक ​​कि आइकन व्यू में और थंबनेल के बिना, वे फ्रीज करेंगे क्योंकि उनमें से अधिकांश ऐसे चरम मामले के लिए डिज़ाइन नहीं किए गए हैं। GUI टूल निर्देशिका में सभी फ़ाइलों / फ़ोल्डरों के लिए प्रस्तुति आइकन लोड करने का प्रयास करता है, यहां तक ​​कि उन वस्तुओं को वर्तमान स्क्रीन भाग में उपयोगकर्ता के लिए दिखाई नहीं देता है। छंटनी भी समस्या का हिस्सा है और इससे बचने का कोई तरीका नहीं।

  • मैं ब्रांड / मॉडल के आधार पर अलग-अलग फ़ोल्डरों पर विभाजित फ़ाइलों को समाप्त करता हूं, फिर 10000 प्रत्येक। हो सकता है कि आप दिनांक का उपयोग कर सकते हैं (जैसा कि ज्यादातर लोग फोटो / स्कैन के साथ करते हैं) या पहला अक्षर (ओं) ( उबंटू पैकेज रिपॉजिटरी में )
  • सीएलआई उपकरणों का उपयोग करना आसान है बजाय इसके कि वे केवल वही दिखाए जो आपने अनुरोध किया है। आप इसके locateस्थान पर त्वरित खोज के लिए उपयोग कर सकते हैं find
  • मूव ऑपरेशन के लिए, mvटर्मिनल में उपयोग (GUI उपकरण धीमा हैं क्योंकि वे समय-समय पर दृश्य को अपडेट करने का प्रयास करते हैं)।

    यदि यह एक ही पार्टीशन में है, तो कमांड केवल फाइल-सिस्टम इंडेक्स में पॉइंटर्स को बदलेगी। यदि नहीं, तो यह दोहरी कार्रवाई (प्रतिलिपि और हटाना) होगी। वह महंगा होगा।

केवल एक ही मामला है जो मैं मदद कर सकता हूं, यदि आप उन फ़ाइलों को कई बार कॉपी कर रहे हैं और वे अपडेट नहीं हैं। जैसा कि मैंने किया था जब मैं अपने संग्रह को दोस्तों के साथ साझा करता हूं, तो हर बार जब मैं इसे कॉपी करने की कोशिश करता हूं तो एक दशक लगता है। (यह केवल छोटे आकार की फाइलों के साथ अधिक उपयोगी है)

  • सिंगल पैकेज या कुछ पैकेज बनाएं, जैसे कि जिप बिना / कम संपीड़न के। जब आप इसे कॉपी करेंगे, तो यह तेज़ हो जाएगा, इसलिए डीएमए को अपना काम करने दें।

3

यदि आप एक समाधान की तलाश कर रहे हैं जो आपको GUI भावना और लचीलेपन के साथ कमांड-लाइन संचालन के लाभ देता है, तो मैं सुझाव देता हूं mc( मध्यरात्रि कमांडर )।

mc कमांडर 2-फलक दृश्य

यह एक ncurses- आधारित विज़ुअल फाइल मैनेजर है - आपके पास आपकी फ़ाइलों पर एक दो-फलक दृश्य और उपलब्ध एक मेनू है। माउस का उपयोग संभव है, यहां तक ​​कि ssh पर भी। आप अपने fs के चारों ओर ब्राउज़ कर सकते हैं, फ़ाइल व्यूअर के साथ फाइलों का निरीक्षण कर सकते हैं, फ़्लाई-ऑन-फ्लाई के मानदंड के अनुसार फ़िल्टर कर सकते हैं और कमांड लाइन पर किए गए कार्यों को कॉपी या स्थानांतरित कर सकते हैं।

यह डॉस प्रोग्राम नॉर्टन कमांडर का एक क्लोन है जो मध्य अस्सी के दशक में लोकप्रिय था। जब भी GUI मेरे लिए अविश्वसनीय होने लगता है, और आपके उद्देश्य के लिए आदर्श होता है तो यह अच्छी तरह से काम करता है।


0

मुझे कुछ इसी तरह की समस्याओं का सामना करना पड़ा है - मैं अपने RAID सेटअप का परीक्षण कर रहा था और जब बहुत बड़ा स्थानान्तरण कर रहा था (उदाहरण के लिए एक बार में 100,000+ फाइलें और 1-2 टीबी डेटा) तो ऐसा लगता है कि स्थानान्तरण काफी तेजी से शुरू होता है - यह ~ 200MB / sec कहते हैं फिर जल्दी से एक उचित पठार पर धीमे चलें ~ 90-120MB / सेकंड (संभवतः ड्राइव पर कुछ फ्लैश कैश स्टोरेज का उपभोग करने के बाद)। फिर 20-30 मिनट के बाद, ऑपरेशन धीरे-धीरे बहुत कम पठार पर गिरना शुरू कर देता है ~ 30-40MB / सेकंड, जब छोटी फाइलों से निपटना होता है - 15hours के करीब 4-5 घंटे का ऑपरेशन।

मैंने निदान करने की कोशिश में कुछ समय बिताया - जैसे संभव ड्राइव दोष। विभिन्न उपकरणों - कमांड लाइन, नॉटिलस की कोशिश करने के बावजूद, मैं बहुत बड़ी कॉपी ऑपरेशन के लिए एक सभ्य प्रवाह को बनाए नहीं रख सका।

आधी रात के कमांडर का उपयोग करने के लिए मेरे लिए सबसे अच्छा काम क्या था, और जब भी नकल धीमी हो जाती थी, तब तक मैं ऑपरेशन को रोक देता था जब तक कि किसी भी लंबित ऑपरेशन के बाद हार्ड-ड्राइव प्रकाश बाहर नहीं निकल जाता - आमतौर पर एक या दो मिनट - फिर अन-पॉज एमसी फिर से। यह एक और 20-30 मिनट के लिए एक अच्छी गति को वापस गोली मार देगा। हालांकि गुस्सा आ रहा है।

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