Gelecekte yardımcı olabilecekleri umuduyla iki çözüm daha yayınlayacağım. Bunlar işteki Linux yöneticilerinden geldi. Sadece bu çivi üzerinde kaç çekiç çalışacağını göstermeye gidiyor!
Çözüm 1:
Merhaba Denham,
Örneğin, "XXX Sezon #" ile dizinin bir parçası her zaman "dış" dizini (yaprak düğüm) olacak, burada birkaç varsayımlar yapmak zorunda.
Her durumda, küçük bir senaryo yazardım. Bunun gibi bir şey işe yaramalıdır (dizinlerdeki tüm boşlukları yakalamanızı sağlamak için değişkenlerin etrafındaki çift tırnaklara dikkat edin):
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
Tabii ki, "mv" $ {olddir} "" $ {newdir} "" komutu ile çalıştırmadan önce, "echo" $ {olddir} "" $ {newdir} "" gibi bir şey koymalısınız. beklediğiniz sonuçları almak ya da başka bir baş ağrısı ile sonuçlanabilir:
Çözüm 2:
Merhaba Denham,
Cevabın çoğu zaten soruydu. Neyse, Series klasöründen aşağıdaki gibi bir şey çalıştırmak gayet iyi çalışmalıdır:
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
Açıklama:
• find -mindepth 2 -maxdepth 2 -type d (dizinleri iki düzey aşağı listele)
• dir. (her dizinde döngü)
• mv -T "$ dir" (kaynak dizinini şu konuma taşı ... -Sezon klasörleri benzersiz değilse bir hata almak için gereklidir, yani "Big Bang Theory Season'ı 22 "ve" Sezon 22 "aynı dizinde)
• dirname" $ dir "dizin yolunu döndürür
• basename" $ dir "dizinin adını döndürür
• sed" s /. Season ([0-9] ) $ / Season \ 1 / i "her ihtimale karşı, büyük / küçük harf duyarsız regexp ile sihri tamamlar.
Benim küçük testte çalıştı (ilk önce mv önce bir yankı ile deneyin):
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