2016-07-30 7 views
1

i mehrere Dateien in meinem Linux-System-Verzeichnis ....Wie alle Dateien in einem Verzeichnis in Linux mit Zeichenfolgensubstitution umbenennen?

meine Dateinamen sind wie umbenennen möchten:

Lec 1 - xxx.webm 
Lec 2 - xxx.webm 
Lec 3 - xxx.webm 
Lec 4 - xxx.webm 

und die Liste geht weiter ...

hier xxx könnte jede Liste von Zeichen (nicht konsistent) ....

i wie hier jede Datei umbenennen möchten:

mv Lec 1 - xxx.webm Lec 1.webm 
mv Lec 2 - xxx.webm Lec 2.webm 
mv Lec 3 - xxx.webm Lec 3.webm 

und so weiter ....

für In-Schleife könnte tun, aber wie die Substitution zu tun?

* Alle Zeichen Streifen nach der Nummer sollte meine umbenannten Datei

Antwort

2

Diese for-Schleife sollte die Arbeit machen:

for f in *.webm; do 
    mv "$f" "${f/ -*/}.webm" 
done 
+0

der Dateiname geändert 'Lec n - webm.webm' – coolstoner

+0

Keine' $ {f/- * /} ' wird alles nach '" "in Originalstring abziehen und dann' .webm' wird wieder hinzugefügt. – anubhava

+0

Nun wurden alle meine Dateien umbenannt in 'Lec n.webm.webm' Kannst du mir helfen, sie wieder in' Lec n.webm' umzubenennen? i diesen Link versucht, aber ich Fehler bekommen http://unix.stackexchange.com/questions/102647/how-to-rename-multiple-files-in-single-command-or-script-in-unix – coolstoner

1

${string%substring}: löscht kürzeste Spiel von $substring von der Rückseite des $string.

for i in *.webm; do mv $i ${i%xxx}; done 

Oder check out:

${string%%substring}: löscht längste Übereinstimmung von $substring von der Rückseite des $string.

0

Wenn Sie util-linux-ng installiert:

find . -name "Lec*.webm" | xargs rename s/ -*// 

oder:

for file in $(find . -name "Lec*.webm") 
do 
    echo mv $file `echo $file | sed s/ -*$//` 
done