सवाल फ़ोल्डर से केवल छवियों की एक विशिष्ट मात्रा को कैसे स्थानांतरित करें


मेरे पास एक फ़ोल्डर है जिसमें 200,000 छवियां हैं। मैं निम्नलिखित करना चाहता हूं:

  1. उस फ़ोल्डर से एक्स फ़ोल्डर में एक्स एक्स छवियों (50 छवियों, 100 छवियों, 200 छवियों) को ले जाएं।
  2. प्रत्येक वाई फ़ोल्डर एक संख्या (फ़ोल्डर 1, फ़ोल्डर 2, फ़ोल्डर 3 ...) हो सकता है।
  3. अंतिम परिणाम इस तरह दिख सकता है:

फ़ोल्डर 1 (छवियों की एक्स मात्रा है) फ़ोल्डर 2 (छवियों की एक्स मात्रा है) फ़ोल्डर 3 (छवियों की एक्स मात्रा है) फ़ोल्डर 4 (छवियों की एक्स मात्रा है)


4
2017-10-16 00:15


मूल




जवाब:


अपनी छवि निर्देशिका में स्क्रिप्ट चलाएं। सुनिश्चित करें कि गंतव्य में कोई उप निर्देशिका नहीं है।

आईएमजी = 100 # स्थानांतरित करने के लिए छवियों की संख्या
डेस = "।" # गंतव्य

मैं = $ (ढूंढें। -मैक्सडेपथ 1 -मिन्डेथ 1-प्रकार एफ | wc -l)
एन = $ (((आई / आईएमजी) + (आई% आईएमजी)))
eval mkdir "$ DES" / फ़ोल्डर {01 .. $ N}

मैं $ में ($ "$ DES" -मैक्सडेपथ 1 -मिन्दपथ 1-प्रकार डी | सॉर्ट) ढूंढें; कर
    एमवी $ (खोजें। -मैक्सडेपथ 1 -मिन्दपथ 1-प्रकार एफ | सॉर्ट | grep -m $ IMG '। *') $ i
किया हुआ

3
2017-10-16 10:06



हाय बशरत, लिपि अच्छी है लेकिन काम नहीं कर रही है। 200K छवियों की वजह से यह त्रुटि "लाइन 9: / बिन / एलएस: तर्क सूची बहुत लंबी है" फेंकता है। - Luis Alvarado♦
@LuisAlvarado तय। - Basharat Sialvi


इस स्क्रिप्ट को आज़माएं, इसे आपके अनुरोध को पूरा करना चाहिए लेकिन अंतिम एक्स फाइलें मूल निर्देशिका में रहेंगी

OrigDIR = ~ / FolderX
DESTDIR = ~ / FolderY
NumberOfMovedItems = $ 1
SubDestDir = $ 2
गणना = 1

जबकि [`$ DIR -OrigDIR 1-प्रकार f | ढूंढें wc -l` -gt $ NumberOfMovedItems]; कर
  NewSubDir = $ DESTDIR / $ {SubDestDir} $ {COUNT}
  mkdir $ NewSubDir
  $ OrigDIR -maxdepth 1 -type f | ढूंढें head -n $ NumberOfMovedItems | xargs -I {} एमवी {} $ NewSubDir
  गिनती ++ दें
किया हुआ

अपनी पसंद के अनुसार FolderX और FolderY के पथ को बदलें।

जब आप स्क्रिप्ट चलाते हैं तो आपको उपनिर्देशिका को स्थानांतरित करने और नाम देने के लिए आइटमों की संख्या प्रदान करनी होती है

स्रोत


1
2017-10-16 05:45



जैसा कि स्क्रिप्ट है, काम नहीं कर रहा है। पहले से ही $ 1 और $ 2 जोड़ा गया है। लिंक में उल्लिखित लिपि का परीक्षण किया और वह काम कर रहा है। यदि आप कर सकते हैं, तो कृपया स्क्रिप्ट को सही करने के लिए अपना उत्तर संपादित करें। - Luis Alvarado♦


मैं एक सूची बनाने के साथ शुरू करूंगा

ls X > X.list
for Y in `seq 1 10` ; do mkdir $Y ; mv `head -n $(( Y * 50 )) X.list | tail -n 50` $Y ; done

0
2017-10-16 04:59