• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Mehrere Dateien umbenennen per Bash mit wildcards?

Hallo,

ich möchte dateien umbenennen, die alle in einem Verzeichnis liegen.
Die Dateinamen sehen folgendermaßen aus:

2011-01-20-888~6000003.jpg
2011-01-20-888~6000004.jpg
2011-01-20-888~6000005.jpg
2011-01-20-888~6000006.jpg


Code:
...
neu=101
files=$(ls *.jpg);
for i in $files;
do
name=${i//-$alt~/-$neu~};
name=${i//~600????./~6000002.};
name=${i//~300????./~3000002.};
echo $name
mv $i "$name";
neu=$[neu+1]
done
...

Die Dateien sollen jetzt hinten alle eine 6000001.jpg bekommen.
Die 888 vorne wird im selben schritt durch 101-nnn ersetzt.
leider klappt es mit den Wildcards nicht.
weder ? noch * funktionieren.

Hat jemand eine Idee?

Gruß

sphings
 
in der Variante wie ich es vorher hatte gibt es keine möglichkeit oder?
Weil die 888 ist auch variabel. Könnte also auch eine 889 oder 890 usw. sein. und auch hinten können die Zahlen bis 6009999.jpg hochlaufen ...
Nach deinem system müsste ich mein bash script umschreiben ...
 
sphings schrieb:
Weil die 888 ist auch variabel. Könnte also auch eine 889 oder 890 usw. sein. und auch hinten können die Zahlen bis 6009999.jpg hochlaufen ...
Code:
mmv -v "*-*~6000*.jpg" "#1-101-#3.jpg"
Mit deinem Ansatz geht das sicher auch irgendwie, aber sowas wie
Code:
name=${i//~600????./~6000002.}
geht nicht. Da das Ganze auf globbing rausläuft und bash dbzgl. ziemlich saugt würde ich den Einzeiler vorziehen.
 
ok dann versuche ich deins mal so umzusetzen.
Aber ein paar indos zum verständnis wären nett.

mmv -v "*-*~6000*.jpg" "#1-101-#3.jpg"
im ersten Teil die * sind mir klar.
wofür stehen denn hinten #1-101-#3 ?
 
sphings schrieb:
Code:
mmv -v "*-*~6000*.jpg" "#1-101-#3.jpg"
im ersten Teil die * sind mir klar.
wofür stehen denn hinten #1-101-#3 ?
#n steht für den n. Match im From Pattern

Steht alles in der Manpage, Stichwort "To Pattern"
 
Hi,

ich pflege in solchen Fällen immer sed zu verwenden. Etwa so.
Code:
neu=101
files=$(ls *.jpg);
for i in $files;
do
  neuername=`echo $i | sed "s/888/$neu/g" | sed "s/600?????/6000001/g"`
  echo $neuername
  mv $i "$neuername";
  neu=$[neu+1]
done
Die Details zu sed müsstest du noch anpassen. Ansonsten entspricht es deinem ersten Ansatz.

Gruß
Georg
 
Oben