Umbenennen eines gesamten Ordnerinhalts

Umbenennen eines gesamten Ordnerinhalts

Ich verwende OSX 10.9.2 (BASH 3.5) und wollte den Inhalt eines ganzen Ordners umbenennen. Also habe ich ein Skript ausgeführt und es kam irgendwie zu folgendem Ergebnis:

s01eDavid.Letterman.2014.02.27.Stupid.Human.Tricks.x264-SWOLLED.mp4
s01eDavid.Letterman.2014.03.07.Lenny.Marcus.HDTV.x264-BATV.mp4
s01eDavid.Letterman.2014.03.24.Jimmy.Carter.HDTV.x264-SWOLLED.mp4
s01eDavid.Letterman.2014.03.25.Emma.Watson.720p.HDTV.x264-SWOLLED.mkv

(Am Anfang jedes Satzes steht eine zusätzliche S01e, obwohl eigentlich S01e01, S01e02 usw. stehen sollten.)

Wie kann ich diese Dateien entfernen/umbenennen, damit es so aussieht?:

s01e1 David.Letterman.2014.02.27.Stupid.Human.Tricks.x264-SWOLLED.mp4
s01e2 David.Letterman.2014.03.07.Lenny.Marcus.HDTV.x264-BATV.mp4
s01e3 David.Letterman.2014.03.24.Jimmy.Carter.HDTV.x264-SWOLLED.mp4
s01e4 David.Letterman.2014.03.25.Emma.Watson.720p.HDTV.x264-SWOLLED.mkv

Danke!

Antwort1

Keine awkLösung:

cnt=1
for f in *; do 
  fcnt=$(printf "%02d" $cnt)
  echo mv "$f" "$(echo $f | sed -e "s/^s01e/&$fcnt /")"
  cnt=$(($cnt+1)); 
done

Ich habe die Episodennummer mit dem Befehl printf zweistellig gemacht.

Dadurch werden die Befehle einfach auf stdout gedruckt, sodass Sie prüfen können, ob Ihnen die Ausgabe gefällt. Entfernen Sie das führende „Echo“ aus Zeile 4, wenn Sie wirklich umbenennen möchten.

Antwort2

episode=1
for x in s01e*; do
  mv "$x" "s01e$episode ${x#s01e}"
  episode=$((episode+1))
done

Bei 10 oder mehr Episoden ist es möglicherweise besser, den Zahlen bis 9 eine Null voranzustellen. Ein einfacher Trick hierfür besteht darin, Zahlen im Bereich 100–199 zu generieren und die führende 1-Ziffer zu entfernen.

episode=101
for x in s01e*; do
  mv "$x" "s01e${episode#1} ${x#s01e}"
  episode=$((episode+1))
done

verwandte Informationen