मैं इस उम्मीद में दो और समाधान पोस्ट करने जा रहा हूं कि वे भविष्य में मददगार हो सकते हैं। ये लिनक्स के काम में प्रवेश से आया था। बस यह दिखाने के लिए जाता है कि इस नाखून पर कितने हथौड़े काम करेंगे!
समाधान 1:
हाय डेनहम,
मैं यहाँ कुछ धारणाएँ बना रहा हूँ, उदाहरण के लिए कि "XXX सीजन #" के साथ निर्देशिका का हिस्सा हमेशा "बाहर" निर्देशिका (पत्ती नोड) होगा।
किसी भी मामले में, मैं थोड़ी स्क्रिप्ट लिखूंगा। कुछ इस तरह से काम करना चाहिए (चर में दोहरे उद्धरणों पर ध्यान दें, यह सुनिश्चित करने के लिए कि आप निर्देशिका में सभी स्थानों पर कब्जा कर लें):
find /media/Expansion2/Series/ -type d | while read olddir
do
newdir=`echo "${olddir}" | awk -F "/" '$NF ~ /Season/ { last=substr($NF,index($NF, "Season")); while (i<(NF-1)) { i++; printf("/%s", $i) }; printf("/%s\n", last) } $NF !~ /Season/ { print }'`
if [ "${olddir}" != "${newdir}" ]
then
mv "${olddir}" "${newdir}"
fi
done
बेशक, इससे पहले कि आप इसे "mv" $ {olddir} "" $ {newdir} "कमांड के साथ चलाएं, आपको यह सुनिश्चित करने के लिए" echo "$ {olddir}" "$ {newdir}" जैसी चीज़ डालनी चाहिए। आप जो परिणाम प्राप्त करने की उम्मीद करते हैं या आप एक और सिरदर्द के साथ समाप्त कर सकते हैं :-P
समाधान 2:
हाय डेनहम,
अधिकांश का उत्तर पहले से ही था। वैसे भी सीरीज फोल्डर से कुछ इस तरह से चलना ठीक काम करना चाहिए:
find -mindepth 2 -maxdepth 2 -type d | while read dir; do mv -T "$dir" "`dirname "$dir"`/`basename "$dir" | sed "s/.*Season \([0-9]*\)$/Season \1/i"`"; done
स्पष्टीकरण:
• -mindepth 2 -maxdepth 2 -type d (सूची निर्देशिका दो स्तर नीचे)
• पढ़ते समय dir; (प्रत्येक dir पर लूप)
• mv -T "$ dir" (स्रोत dir को ... -T को एक त्रुटि प्राप्त करने की आवश्यकता है यदि सीज़न फ़ोल्डर अद्वितीय नहीं हैं, तो आपके पास "बिग बैंग थ्योरी सीजन" नहीं है 22 "और" सीज़न 22 "एक ही निर्देशिका में)
• dirname" $ dir "वह पथ लौटाता है जहाँ dir है
• basename" $ dir "निर्देशिका का नाम देता है
• sed" s /। सीज़न ([0-9]] ) $ / सीजन \ 1 / i "केस असंवेदनशील regexp के साथ जादू को पूरा करता है, बस मामले में।
मेरे छोटे परीक्षण में इसने काम किया (mv से पहले इसे प्रतिध्वनि के साथ आज़माएं):
someuser@linux-box:/tmp/Series$ find
.
./The Big Bang Theory
./The Big Bang Theory/Season 2
./The Big Bang Theory/Season 2/file1.avi
./The Big Bang Theory/Season 2/file 3.avi
./The Big Bang Theory/Season 2/file2.avi
./The Big Bang Theory/Season 2/file
./The Big Bang Theory/Season 2/3.avi
./The Big Bang Theory/The Big Bang Theory Season 1
./The Big Bang Theory/The Big Bang Theory Season 1/file1.avi
./The Big Bang Theory/The Big Bang Theory Season 1/file 3.avi
./The Big Bang Theory/The Big Bang Theory Season 1/file2.avi
./The Big Bang Theory/The Big Bang Theory Season 1/file
./The Big Bang Theory/The Big Bang Theory Season 1/3.avi
./Other Series
./Other Series/Season 2
./Other Series/Stre dsfdf sd dSeason 3
someuser@linux-box:/tmp/Series$ find -mindepth 2 -maxdepth 2 -type d | while read dir; do mv -T "$dir" "dirname "$dir"
/basename "$dir" | sed "s/.*Season \([0-9]*\)$/Season \1/i"
"; done
mv: ./The Big Bang Theory/Season 2' and
./The Big Bang Theory/Season 2' are the same file
mv: ./Other Series/Season 2' and
./Other Series/Season 2' are the same file
someuser@linux-box:/tmp/Series$ find
.
./The Big Bang Theory
./The Big Bang Theory/Season 2
./The Big Bang Theory/Season 2/file1.avi
./The Big Bang Theory/Season 2/file 3.avi
./The Big Bang Theory/Season 2/file2.avi
./The Big Bang Theory/Season 2/file
./The Big Bang Theory/Season 2/3.avi
./The Big Bang Theory/Season 1
./The Big Bang Theory/Season 1/file1.avi
./The Big Bang Theory/Season 1/file 3.avi
./The Big Bang Theory/Season 1/file2.avi
./The Big Bang Theory/Season 1/file
./The Big Bang Theory/Season 1/3.avi
./Other Series
./Other Series/Season 3
./Other Series/Season 2