webentwicklung-frage-antwort-db.com.de

Benennen Sie alle Dateien in einem Ordner mit einem Präfix in einem einzigen Unix-Befehl um

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

71
vasanthi

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
90
miku

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.

69
pavium

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)

25
Zheng Qsin

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

  1. Wählen Sie die Elemente aus und klicken Sie bei gedrückter Ctrl-Taste auf eines davon.

  2. Wählen Sie im Kontextmenü die Option Elemente umbenennen.

  3. 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.

  4. 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.

12
Tejas C

Sie können einfach -i anstatt -I {}

ls | xargs -i mv {} unix_{}

Das funktioniert auch einwandfrei.

  • ls - listet alle Dateien im Verzeichnis auf
  • xargs - 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ält

Awk benutzen:

ls -lrt | grep '^-' | awk '{print "mv "$9" unix_"$9""}' | sh
5
NirajW

Funktioniert auch für Elemente mit Leerzeichen und ignoriert Verzeichnisse

for f in *; do [[ -f "$f" ]] && mv "$f" "unix_$f"; done
1
user645527

Mit rnm (Sie müssen es installieren):

rnm -ns 'Unix_/fn/' *

Oder

rnm -rs '/^/Unix_/' *

PS: Ich bin der Autor dieses Tools.

1
Jahid

Situation:

Wir haben certificate.keycertificate.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.

0