Benennen Sie alle Dateien in einem Ordner mit dem Präfix „Unix_“ um. Nehmen Sie also an, dass ein Ordner zwei Dateien a.txt und b.pdf enthält. Anschließend sollten beide Dateien von einem einzigen Befehl in Unix_a.txt und Unix_b.pdf umbenannt werden
Wenn Ihre Dateinamen kein Leerzeichen enthalten und Sie keine Unterverzeichnisse haben, können Sie eine einfache for
-Schleife verwenden:
$ for FILENAME in *; do mv $FILENAME Unix_$FILENAME; done
Verwenden Sie andernfalls den praktischen Befehl rename
(bei dem es sich um ein Perl-Skript handelt) - obwohl er möglicherweise nicht bei jedem Unix sofort verfügbar ist (z. B. wird OS X nicht mit rename
geliefert).
Ein kurzer Überblick auf debian-administration.org:
Wenn Ihre Dateinamen Leerzeichen enthalten, ist es einfacher, find
zu verwenden. Unter Linux sollte Folgendes funktionieren:
$ find . -type f -name '*' -printf "echo mv '%h/%f' '%h/Unix_%f\n'" | sh
Auf BSD-Systemen gibt es kein -printf
Option leider. Aber GNU findutils sollte installierbar sein (z. B. unter Mac OS X mit brew install findutils
).
$ gfind . -type f -name '*' -printf "mv \"%h/%f\" \"%h/Unix_%f\"\n" | sh
Probieren Sie den Befehl rename
im Ordner mit den Dateien:
rename 's/^/Unix_/' *
Das Argument des Umbenennens ( sed s Befehl ) gibt an, dass der reguläre Ausdruck ^ durch Unix _ ersetzt werden soll. Das Caret (^) ist ein Sonderzeichen, das Zeilenanfang bedeutet.
Ich denke, das ist genau das, wonach Sie suchen:
ls | xargs -I {} mv {} Unix_{}
Ja, es ist einfach, elegant und mächtig, und natürlich auch online. Eine ausführlichere Einführung erhalten Sie von mir auf der Seite: Dateien und Verzeichnisse umbenennen (Präfix hinzufügen)
Vor kurzem war ich mit der gleichen Situation konfrontiert und fand eine einfachere integrierte Lösung. Ich teile es hier, damit es anderen Menschen helfen kann, nach einer Lösung zu suchen.
Unter OS X Yosemite hat Apple die Batch-Umbenennungsfunktionen direkt in Finder integriert. Weitere Informationen sind verfügbar hier . Ich habe auch die folgenden Schritte kopiert.
Mehrere Elemente umbenennen
Wählen Sie die Elemente aus und klicken Sie bei gedrückter Ctrl-Taste auf eines davon.
Wählen Sie im Kontextmenü die Option Elemente umbenennen.
Wählen Sie im Popup-Menü unter Ordnerelemente umbenennen, ob Sie den Text in den Namen ersetzen, den Namen Text hinzufügen oder das Namensformat ändern möchten.
Text ersetzen: Geben Sie den zu entfernenden Text in das Feld Suchen ein und geben Sie den hinzuzufügenden Text in das Feld "Ersetzen durch" ein.
Text hinzufügen: Geben Sie den Text, den Sie hinzufügen möchten, in das Feld ein und fügen Sie ihn vor oder nach dem aktuellen Namen ein.
Format: Wählen Sie ein Namensformat für die Dateien und stellen Sie dann den Index, den Zähler oder das Datum vor oder nach den Namen. Geben Sie einen Namen in das Feld Benutzerdefiniertes Format ein und geben Sie die Nummer ein, mit der Sie beginnen möchten.
Klicken Sie auf Umbenennen.
Wenn Sie ein gemeinsames Muster in Ihren Dateien haben, können Sie Text ersetzen verwenden, andernfalls würde das Hinzufügen von Text ebenfalls die Aufgabe übernehmen.
Sie können einfach -i
anstatt -I {}
ls | xargs -i mv {} unix_{}
Das funktioniert auch einwandfrei.
ls
- listet alle Dateien im Verzeichnis aufxargs
- akzeptiert alle Dateien Zeile für Zeile aufgrund der -i
Möglichkeit{}
ist der Platzhalter für alle Dateien, der erforderlich ist, wenn xargs
mehr als zwei Argumente als Eingabe erhältAwk benutzen:
ls -lrt | grep '^-' | awk '{print "mv "$9" unix_"$9""}' | sh
Funktioniert auch für Elemente mit Leerzeichen und ignoriert Verzeichnisse
for f in *; do [[ -f "$f" ]] && mv "$f" "unix_$f"; done
Mit rnm (Sie müssen es installieren):
rnm -ns 'Unix_/fn/' *
Oder
rnm -rs '/^/Unix_/' *
PS: Ich bin der Autor dieses Tools.
Situation:
Wir haben certificate.key
certificate.crt
In /user/ssl/
Wir möchten alles, was mit certificate
beginnt, in certificate_OLD
Umbenennen.
Wir befinden uns jetzt in /user
Zuerst machst du einen Probelauf mit -n
:
rename -n "s/certificate/certificate_old/" ./ssl/*
Welches gibt zurück:
rename(./ssl/certificate.crt, ./ssl/certificate_OLD.crt) rename(./ssl/certificate.key, ./ssl/certificate_OLD.key)
Ihre Dateien bleiben unverändert. Dies ist nur ein Testlauf.
Lösung:
Wenn Sie mit dem Ergebnis des Tests zufrieden sind, führen Sie es wie folgt aus:
rename "s/certificate/certificate_OLD/" ./ssl/*
Was es bedeutet:
`benenne" s/SOMETHING/SOMETING_ELSE "PATH/FILES um
Tipp:
Wenn Sie bereits auf dem Weg sind, gehen Sie wie folgt vor:
rename "s/certificate/certificate_OLD/" *
Oder wenn Sie dies in einem Unterverzeichnis tun möchten, das mit ss
beginnt, gehen Sie wie folgt vor:
rename -n "s/certificat/certificate_old/" ./ss*/*
Sie können auch tun:
rename -n "s/certi*/certificate_old/" ./ss*/*
Der alles umbenennt, was mit certi
beginnt, in jedem Unterverzeichnis, das mit ss
beginnt.
Der Himmel ist die Grenze.
Spielen Sie mit Regex und testen Sie dies IMMER VORHER mit -n
.
SEHEN SIE SICH DAS AN, AUCH UMBENENNEN SIE ORDNERNAMEN, DIE PASSEN. Besser cd
in das Verzeichnis und mach es dort. USE AT EIGENES RISIKO.