https://serverfault.com/questions/70939/how-to-replace-a-text-string-in-multiple-files-in-linux
https://serverfault.com/questions/228733/how-to-rename-multiple-files-by-replacing-word-in-file-name
https://serverfault.com/questions/212153/replace-string-in-files-with-certain-file-extension
https://serverfault.com/questions/33158/searching-a-number-of-files-for-a-string-in-linux
Diese genannten Artikel haben alle meine Frage beantwortet. Jedoch arbeitet keiner von ihnen für mich. Ich vermute, es liegt daran, dass die Zeichenfolge, die ich ersetzen möchte, ein # enthält. Gibt es eine spezielle Möglichkeit, dies zu beheben?
Ich habe eine Image-Datei, bei der während einer Site-Migration ein é durch # U00a9 ersetzt wurde. Diese sehen so aus:
Lucky-#U00a9NBC-80x60.jpg
Lucky-#U00a9NBC-125x125.jpg
Lucky-#U00a9NBC-150x150.jpg
Lucky-#U00a9NBC-250x250.jpg
Lucky-#U00a9NBC-282x232.jpg
Lucky-#U00a9NBC-300x150.jpg
Lucky-#U00a9NBC-300x200.jpg
Lucky-#U00a9NBC-300x250.jpg
Lucky-#U00a9NBC-360x240.jpg
Lucky-#U00a9NBC-400x250.jpg
Lucky-#U00a9NBC-430x270.jpg
Lucky-#U00a9NBC-480x240.jpg
Lucky-#U00a9NBC-600x240.jpg
Lucky-#U00a9NBC-600x250.jpg
Lucky-#U00a9NBC.jpg
und ich möchte es in so etwas ändern:
Lucky-safeNBC-80x60.jpg
Lucky-safeNBC-125x125.jpg
Lucky-safeNBC-150x150.jpg
Lucky-safeNBC-250x250.jpg
Lucky-safeNBC-282x232.jpg
Lucky-safeNBC-300x150.jpg
Lucky-safeNBC-300x200.jpg
Lucky-safeNBC-300x250.jpg
Lucky-safeNBC-360x240.jpg
Lucky-safeNBC-400x250.jpg
Lucky-safeNBC-430x270.jpg
Lucky-safeNBC-480x240.jpg
Lucky-safeNBC-600x240.jpg
Lucky-safeNBC-600x250.jpg
Lucky-safeNBC.jpg
AKTUALISIEREN:
Diese Beispiele beginnen alle mit "LU00a9ucky", aber hier sind viele Bilder mit unterschiedlichen Namen. Ich ziele einfach auf den "# U00a9" -Teil der Zeichenfolge ab, um ihn durch "safe" zu ersetzen.
rename
Befehl. Ich vermute, Ihre Umbenennung wäre so einfach wierename -n 's/#/safeNBC/' *.jpg
.rename -n 's/#U00a9/safe/' *.jpg
und der Befehl wurde akzeptiert, aber es sind keine Änderungen aufgetreten.-n
ist dieno act
Option. So können Sie sehen, ob es funktioniert, bevor Sie es tatsächlich verwenden. Wurden in der Ausgabe auf dem Bildschirm die potenziellen neuen Namen korrekt angezeigt?Antworten:
Zum Ersetzen
#
vonsomethingelse
Dateinamen im aktuellen Verzeichnis (nicht rekursiv) können Sie das GNU- Dienstprogramm zum Umbenennen verwenden :Zeichen wie
-
müssen mit einem Escapezeichen versehen werden\
.Für Ihren Fall möchten Sie verwenden
Beachten Sie, dass Sie, wenn Sie nur eine bestimmte Auswahl von Dateien bearbeiten möchten, z. B. nur
*.jpg
, die endgültige Eingabe so anpassen, dass sie dieser Auswahl entspricht:Verwenden Sie das
-n
Flag, um einen Test durchzuführen, bevor Sie die Dateinamen tatsächlich ändern :Für OS X können GNU Umbenennungs installiert werden Homebrew :
brew install rename
.quelle
rename
du?# sudo pacman -S perl-rename
wird die Perl-Version installieren, die leistungsfähiger ist und möglicherweise ausreicht, um diese Antwort für Sie arbeiten zu lassen.rename --version
kehrtrename from util-linux 2.29.2
ja das ja nicht die Perl-Version zurück.rename
Hilfsprogramme, aber keines davon wird von GNU entwickelt: Debian-basierte Distributionen enthalten einrename
Hilfsprogramm mit ihrem Perl-Paket, während Red Hat-basierte Distributionen dasrename
Hilfsprogrammutil-linux
aus der Linux-Kernel-Organisation verwenden. Ihr Link ist zurrename
C- Funktion aus der GNU-Standardbibliothek./g
inrename 's/#U00a9/safe/g' *
Suchen Sie die Liste der Dateien und ersetzen Sie das Schlüsselwort. Unten ist ein Beispiel
quelle
mv
Argumente in Anführungszeichen setzen , falls der Name Leerzeichen enthältDies ist nicht schwer, stellen Sie einfach sicher, dass der Oktothorpe (#) im Namen durch einen umgekehrten Schrägstrich (\) vorangestellt wird.
quelle
#
Klängen zu entkommen, die ich brauche. Ich sehe keinen Backslash in Ihrem Beispiel. Sollte es so aussehen:s/\#U00a9/safe/
#
Verwenden Sie zum Verlassen der Shell einfache Anführungszeichen ('#'
), doppelte Anführungszeichen ("#"
) oder umgekehrte Schrägstriche (\#
).In Ihrem Fall ist es am einfachsten, den
rename
Befehl zu verwenden (falls verfügbar):quelle
rename 's/#/somethingelse/' *
) auf meinem Computer (Arch Linux) nicht funktionierte, war dies der Fall.Ich weiß nicht, wie ich es anstellen soll, aber Sie können dies in einer Bash-Shell versuchen:
Erläuterung:
Weitere Informationen zur Parametersubstitution (bei der es sich um eine stark ungenutzte IMO handelt): http://www.tldp.org/LDP/abs/html/parameter-substitution.html
quelle
Die obigen Beispiele funktionierten auf meinem System nicht (CentOS 5.6), daher habe ich einen (möglicherweise systemspezifischeren) Befehl gefunden, der funktioniert (Hinweis: Es muss ein '#' mit
\
in der Befehlszeile eingegeben werden):rename \#U00a9 safe *.jpg
[Außerdem: Ich habe noch nicht genug Reputation, um einen Kommentar abzugeben, also als Antwort auf Nikhils Frage bezüglich der Verwendung von
/g
inrename 's/old_string/new_string/g'
(in den Kommentaren für eine andere Antwort oben gestellt):Verwenden Sie den
g
Modifikator, um eine 'globale' Ersetzung durchzuführen (d. H., Um old_string durch new_string zu ersetzen, so oft old_string vorkommt). Dies sollte in meiner Antwort nicht notwendig sein, da dasrename
auf alle mit angegebenen Dateien angewendet wird*
. Eine kurze Erklärung dieses und anderer Modifikatoren finden Sie unter https://www.computerhope.com/unix/rename.htm .]quelle
rename
als von Debian abgeleitete Betriebssysteme. Siehe unix.stackexchange.com/a/238862/135943 . Übrigens ist CentOS 5.6 ziemlich alt und ich empfehle Ihnen, ein Upgrade durchzuführen.Hier ist die DTK-Lösung, die in wiederverwendbare Bash-Funktion eingebettet ist:
So können Sie es verwenden:
quelle
Hat eigentlich
rename
eine Option genau dafür genannt--subst
oder-s
kurz gesagt. Die Regex-Syntax muss nicht verwendet werden.Wenn Sie mehrere Vorkommen ersetzen möchten, verwenden Sie
--subst-all
oder-S
.Übrigens wollte ich nur eine Zeichenkette durch nichts ersetzen (sie aus dem Dateinamen entfernen) ... nun, wir haben auch eine Option dafür
-d/--delete
und-D/--delete-all
:quelle
Eine weitere Option ist die Verwendung
pyRenamer
einer Anwendung, die speziell für die Stapelumbenennung entwickelt wurde.Es kann mit installiert werden
sudo apt-get install pyrenamer
Einzelheiten zur Verwendung finden Sie in der README-Datei auf GitHub .
quelle