GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Shell/Bash-Verknüpfung zum Massenumbenennen von Dateien in einem Ordner

Da ist prename , mit dem Sie REGEX verwenden können:

prename 's/^.*-doc-(.*\.txt)$/doc-$1/'  *.txt

Verwenden Sie die Option -n simulieren:

prename -n 's/^.*-doc-(.*\.txt)$/doc-$1/'  *.txt

Hinweis: Dies wird als rename versendet in vielen Linux-Distributionen, aber nicht in allen -- daher verwende ich den kanonischen Namen für das Dienstprogramm, das mit Perl geliefert wird.


Ich würde so etwas vorschlagen:

for i in *-doc-*.txt; do mv "$i" "${i/*-doc-/doc-}"; done

${i/*-doc-/doc-} ersetzt das erste Vorkommen von *-doc- mit doc- .

Wenn Sie mehr als eine Ersetzung vornehmen müssen (siehe Kommentar Nummer 1), müssen Sie den ${var//Pattern/Replacement} verwenden Variante. Wenn Sie den Anfang des Namens ersetzen müssen, müssen Sie ${var/#Pattern/Replacement} verwenden , wenn Sie das Ende (dh die Erweiterung) ersetzen müssen, müssen Sie den ${var/%Pattern/Replacement} verwenden bilden.

Weitere Einzelheiten finden Sie unter Shell-Parametererweiterung. Diese Erweiterung ist Bash-spezifisch.


Wenn Sie rename haben dann rename 's/^.*-doc-/doc-/' *.txt sollte reichen.


Wenn Sie in Unterverzeichnisse rekursiv gehen möchten, gibt es auch:

find . -maxdepth N -type f -name "$pattern" | sed -e 'p' -E -e "s/$str1/$str2/g" | xargs -n2 mv

Auf Systemen, die erweiterte reguläre Ausdrücke automatisch unterstützen, können Sie -E weglassen .

Vorteile:

  • rekursiert in Unterverzeichnisse
  • Sie können die maximale Tiefe der Rekursion steuern
  • Sie können Dateien und/oder Verzeichnisse umbenennen (-type f|d)

Nachteile:

  • etwas kompliziertere reguläre Ausdrücke, da Sie den Pfad entfernen müssen, um an den Dateinamen zu gelangen

(Antwort ab hier geändert)


Linux
  1. Skript zum Überwachen des Ordners auf neue Dateien?

  2. Alle Dateien/Verzeichnisse außer einer Datei entfernen?

  3. Shell-Skript zum Verschieben der ältesten Dateien?

  4. Die Einstellung in Bash für Globbing, um zu steuern, ob * mit Punktdateien übereinstimmt?

  5. Wie erstelle ich eine saubere Shell-Umgebung für den vorübergehenden Gebrauch?

Was ist Ihre Lieblings-Shell für die Arbeit als Systemadministrator?

Shell-Scripting für Anfänger – So schreiben Sie Bash-Scripts unter Linux

12 Bash-For-Loop-Beispiele für Ihr Linux-Shell-Scripting

Wie die BASH-Shell ihre Konfigurationsdateien unter Linux lädt

IDE / Emacs-Modus für Shell-Scripting in Bash/Sh usw

Führen Sie alle Shell-Skripte im Ordner aus