Benennen Sie alle Dateien in einem Ordner mit Präfix um "Unix_"
Angenommen, ein Ordner enthält zwei Dateien
a.txt
b.pdf
dann sollten beide von einem einzigen Befehl in umbenannt werden
Unix_a.txt
Unix_b.pdf
Benennen Sie alle Dateien in einem Ordner mit Präfix um "Unix_"
Angenommen, ein Ordner enthält zwei Dateien
a.txt
b.pdf
dann sollten beide von einem einzigen Befehl in umbenannt werden
Unix_a.txt
Unix_b.pdf
Antworten:
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 rename
Befehl (ein Perl-Skript) - obwohl er möglicherweise nicht unter jedem Unix sofort verfügbar ist (z. B. wird OS X nicht mitgeliefert rename
).
Ein kurzer Überblick unter debian-administration.org:
Wenn Ihre Dateinamen Leerzeichen enthalten, ist die Verwendung find
unter Linux einfacher : Folgendes sollte funktionieren:
$ find . -type f -name '*' -printf "echo mv '%h/%f' '%h/Unix_%f\n'" | sh
Auf BSD-Systemen gibt es -printf
leider keine Option. Aber GNU findutils sollte (zB auf Mac OS X mit installierbar sein brew install findutils
).
$ gfind . -type f -name '*' -printf "mv \"%h/%f\" \"%h/Unix_%f\"\n" | sh
find
.
for f in *; do [[ -f ${f} ]] && mv ...; done
, nur Dateien
for FILENAME in *; do mv "$FILENAME" "Unix_$FILENAME"; done
funktioniert dies unabhängig davon, welche Zeichen in den Dateinamen enthalten sind. Es werden auch Verzeichnisse, Sockets, Symlinks und andere Dateitypen verschoben. Ich nehme an, das spielt keine Rolle.
Versuchen Sie den rename
Befehl im Ordner mit den Dateien :
rename 's/^/Unix_/' *
Das Argument der Umbenennung ( Befehl sed s ) gibt an, dass der reguläre Ausdruck ^ durch Unix_ ersetzt werden soll . Das Caret (^) ist ein Sonderzeichen, das den Zeilenanfang bedeutet .
's/^/.../'
bedeutet?
's/^/.../'
ist das Perl-Ausdrucksargument für den Umbenennungsbefehl
rename 's/^start_/run_' *
Ich denke, das ist genau das, wonach Sie suchen:
ls | xargs -I {} mv {} Unix_{}
Ja, es ist einfach, aber elegant und kraftvoll und auch einzeilig. Eine ausführlichere Einführung erhalten Sie von mir auf der Seite: Dateien und Verzeichnisse umbenennen (Präfix hinzufügen)
ls
. Dies kann zu Problemen führen, wenn die Dateinamen Leerzeichen oder andere merkwürdige Zeichen enthalten.
Ich war kürzlich mit der gleichen Situation konfrontiert und fand eine einfachere eingebaute Lösung. Ich teile es hier, damit es anderen Menschen helfen kann, nach einer Lösung zu suchen.
Mit OS X Yosemite hat Apple die Batch-Umbenennungsfunktionen direkt in Finder integriert. Details finden Sie hier . Ich habe auch die folgenden Schritte kopiert,
Benennen Sie mehrere Elemente um
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 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 Text, den Sie hinzufügen möchten, 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 den Text vor oder nach dem aktuellen Namen hinzu.
Format: Wählen Sie ein Namensformat für die Dateien und setzen Sie dann den Index, den Zähler oder das Datum vor oder nach dem Namen. Geben Sie einen Namen in das Feld Benutzerdefiniertes Format ein und geben Sie dann die Nummer ein, mit der Sie beginnen möchten.
Klicken Sie auf Umbenennen.
Wenn Ihre Dateien ein gemeinsames Muster haben, können Sie Text ersetzen verwenden, andernfalls würde auch das Hinzufügen von Text die Aufgabe übernehmen.
Sie können einfach -i
anstelle von verwenden-I {}
ls | xargs -i mv {} unix_{}
Das funktioniert auch perfekt.
ls
- listet alle Dateien im Verzeichnis aufxargs
- akzeptiert aufgrund der -i
Option alle Dateien zeilenweise{}
ist der Platzhalter für alle Dateien, der erforderlich ist, wenn xargs
mehr als zwei Argumente als Eingabe abgerufen werdenMit awk:
ls -lrt | grep '^-' | awk '{print "mv "$9" unix_"$9""}' | sh
-i
ist veraltet, jetzt ist nur-I
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.
rename
funktioniert das bei mir nicht, rnm
tut es aber .
Lage:
Wir haben certificate.key
certificate.crt
drinnen/user/ssl/
Wir wollen etwas umbenennen , die mit beginnt certificate
zucertificate_OLD
Wir befinden uns jetzt im Inneren /user
Zuerst machst du einen Trockenlauf mit -n
:
rename -n "s/certificate/certificate_old/" ./ssl/*
Welches kehrt 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 wirklich aus:
rename "s/certificate/certificate_OLD/" ./ssl/*
Was es bedeutet:
`benenne" s / SOMETHING / SOMETING_ELSE "PATH / FILES um
Trinkgeld:
Wenn Sie bereits auf dem Pfad sind, führen Sie es folgendermaßen aus:
rename "s/certificate/certificate_OLD/" *
Oder wenn Sie dies in einem Unterverzeichnis tun möchten, das mit ss
do beginnt :
rename -n "s/certificat/certificate_old/" ./ss*/*
Sie können auch tun:
rename -n "s/certi*/certificate_old/" ./ss*/*
Womit alles umbenannt wird, was certi
in einem Unterverzeichnis beginnt, das mit beginnt ss
.
Der Himmel ist die Grenze.
Spielen Sie mit Regex herum und testen Sie dies IMMER VORHER mit -n
.
Achten Sie darauf, dass die Namen der Ordner sogar umbenannt werden. Bessercd
ins Verzeichnis und mach es dort. VERWENDUNG AUF EIGENE GEFAHR.