Antworten:
Verwenden Sie einfach bash, ohne externe Befehle aufrufen zu müssen.
for file in *_h.png
do
mv "$file" "${file/_h.png/_half.png}"
done
Nicht hinzufügen #!/bin/sh
Für diejenigen, die diesen Einzeiler benötigen:
for file in *.png; do mv "$file" "${file/_h.png/_half.png}"; done
Do not add #!/bin/sh
? Ich habe versucht, beide mit / ohne diese Aussage zu arbeiten.
#!/bin/bash
. Das heißt, Bash ist normalerweise die Standard-Shell in vielen Computern, so dass Sie nicht viele Unterschiede finden: D Weitere Informationen finden Sie hier
Versuchen Sie den rename
Befehl:
rename 's/_h.png/_half.png/' *.png
Aktualisieren:
Anwendungsbeispiel:
Inhalte erstellen
$ mkdir /tmp/foo
$ cd /tmp/foo
$ touch one_h.png two_h.png three_h.png
$ ls
one_h.png three_h.png two_h.png
Testlösung:
$ rename 's/_h.png/_half.png/' *.png
$ ls
one_half.png three_half.png two_half.png
ls
? Was rename ...
versuchst du?
rename
ist kein Standard-Unix-Tool.
brew install rename
's//'
rename [options] expression replacement file...
rename from util-linux 2.23.2
.
JEDES Zeichen übereinstimmt, nicht nur ein Punkt - für wörtliche Punkte verwenden Sie \.
stattdessen
for f in *.png; do
fnew=`echo $f | sed 's/_h.png/_half.png/'`
mv $f $fnew
done
mv $f $fnew
mit echo $fnew
als die zweite Zeile der Ausgabe sieht gesund , um sicherzustellen.
Suchen Sie eine reine Bash-Lösung? Es gibt viele Ansätze, aber hier ist einer.
for file in *_h.png ; do mv "$file" "${file%%_h.png}_half.png" ; done
Dies setzt voraus, dass die einzigen Dateien im aktuellen Verzeichnis diejenigen _h.png
sind, die Sie umbenennen möchten.
Viel genauer
for file in 0{5..6}_h.png ; do mv "$file" "${file/_h./_half.}" ; done
Angenommen, diese beiden Beispiele sind Ihre einzigen. Dateien.
Für den allgemeinen Fall, Umbenennen Datei in hat bereits abgedeckt vor .
Verwenden Sie das rename
in Perl geschriebene Dienstprogramm. Könnte sein, dass es nicht standardmäßig verfügbar ist ...
$ touch 0{5..6}_h.png
$ ls
05_h.png 06_h.png
$ rename 's/h/half/' *.png
$ ls
05_half.png 06_half.png
Ich hatte eine ähnliche Frage: Im Handbuch wird das Umbenennen als beschrieben
rename [option] expression replacement file
Sie können es also auf diese Weise verwenden
rename _h _half *.png
Im Code: '_h' ist der Ausdruck, nach dem Sie suchen. '_half' ist das Muster, durch das Sie ersetzen möchten. '* .png' ist der Dateibereich, nach dem Sie nach Ihren möglichen Zieldateien suchen.
Hoffe das kann helfen c:
Ein anderer Ansatz kann die Verwendung der Batch-Umbenennungsoption manuell sein
Klicken Sie mit der rechten Maustaste auf die Datei -> Benutzerdefinierte Dateibefehle -> Stapelumbenennung und Sie können h ersetzen. mit der Hälfte.
Dies funktioniert für Linux-basierte GUI mit WinSCP usw.
Verwenden Sie das rename
Dienstprogramm:
rc@bvm3:/tmp/foo $ touch 05_h.png 06_h.png
rc@bvm3:/tmp/foo $ rename 's/_h/_half/' *
rc@bvm3:/tmp/foo $ ls -l
total 0
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 05_half.png
-rw-r--r-- 1 rc rc 0 2011-09-17 00:15 06_half.png
Obwohl der Antwortsatz vollständig ist, muss ich einen weiteren fehlenden hinzufügen.
for i in *_h.png;
do name=`echo "$i" | cut -d'_' -f1`
echo "Executing of name $name"
mv "$i" "${name}_half.png"
done