Zum Beispiel möchte ich mv (.*?).sql $1.php
,
Gibt es einen Befehl, mit dem ich Umbenennungsmuster festlegen kann?
quelle
Zum Beispiel möchte ich mv (.*?).sql $1.php
,
Gibt es einen Befehl, mit dem ich Umbenennungsmuster festlegen kann?
Wie andere schon erwähnt haben, rename
ist dies gut, aber lesen Sie die Manpage ( man rename
), bevor Sie es versuchen. Es gibt mindestens zwei völlig unterschiedliche Tools, rename
die als solche bezeichnet werden. Welches Tool Sie verwenden, hängt von Ihrer Distribution ab. Ein falscher Anruf kann gefährlich sein.
Hier ist die Manpage für die Perl-basierte Version von Larry Wall, die mit Ubuntu geliefert wird. Sie geben ihm einen Perl-Ausdruck wierename 's/\.sql$/.php/' *.sql
Hier ist die Manpage für die Umbenennung, die mit älteren Red Hat- und CentOS-Distributionen geliefert wird. Die Verwendung ist wie eine einfache Zeichenfolgensubstitutionrename .sql .php *.sql
Sie können auch einen Bash-Einzeiler verwenden, um jede Datei einzeln zu verarbeiten:
$ for f in *.sql; do mv -i "$f" "${f%%.*}.php"; done
rename
funktion (dh busybox)Es gibt
rename(1)
, die keine regulären Ausdrücke verwenden, aber Ihr Problem lösen können:Es gibt auch
mmv(1)
, aber ich bin mit der Funktionsweise nicht vertraut.quelle
/usr/bin/rename
Links zu verwendet/usr/bin/prename
, für die reguläre Ausdrücke erforderlich sind.Tag auch,
Sie können auch versuchen, etwas einzugeben
Oder um es mit Regex zu machen, ändere es leicht in
für ein bisschen Spaß beim Shell-Codieren. (-:
quelle
ls
Ausgabe analysieren .sed
Beispiel ist jedoch ziemlich gut.Als Klempner mag ich Rohre :)
Hinweis: Diese Antwort ist wortreich - als Neuling weiß ich es zu schätzen, wenn sich jemand, der es weiß, die Zeit nimmt, um zu erklären, und ich zahle "vorwärts". Wenn Sie kein Neuling sind, entschuldigen Sie bitte die Länge und Ausführlichkeit.
Woher:
listet alle Dateien auf, die dem Muster entsprechen, in diesem Fall suche ich nach Dateien mit dem Datum im Dateinamen im Format 'JJJJMMTT'
^ 1: 1. Erfassungsgruppe - der gesamte Dateiname
^ 2: 2. Erfassungsgruppe - der erste Teil des Dateinamens
^ 3: 3. Erfassungsgruppe - der 2. Dateinamenteil - hier das Datum als 'JJJJMMTT'
^ 4: 4. Erfassungsgruppe - optionaler Dateinamenteil zwischen dem Datum und der Erweiterung sowie der Erweiterung selbst
Sooooo .... wenn ich eine Datei mit dem Namen habe
...dann
heißt eigentlich
Beachten Sie, dass die Ausgabe des Befehls sed zur Ausführung an 'bash' weitergeleitet wird. Um zuerst zu sehen, ob die vorgeschlagene Datei verschoben wird, OHNE sie tatsächlich zu verschieben, entfernen Sie zuerst das Zeichen '| bash 'am Ende und versuche es so:
Hierdurch werden keinerlei Änderungen vorgenommen, es wird jedoch der Befehl angezeigt, der ausgeführt wird, wenn Sie ihn mit '| ausführen Bash 'markiert am Ende.
Dies ist nützlich, da Sie beliebige Unterverzeichnisse aus Teilen des Dateinamens oder anderen Elementen erstellen können, die Sie im Befehl sed zum Ersetzungstext hinzufügen. Beachten Sie jedoch, dass sed viele Escape-Zeichen erfordert.
SED Regex Klammern:
(...) für Capture-Gruppierung Escape-Zeichen erforderlich -> \ (... \)
{m, n} müssen zur Quantifizierung des vorherigen Objekts ausgeblendet werden -> \ {m, n \}
/ erfordert ein Escapezeichen in der Ersatzzeichenfolge -> \ /
[...] Für Zeichenklassen ist KEIN Escape-Befehl erforderlich
\ 1 in der Ersatzzeichenfolge bezieht sich auf die erste erfasste Gruppe usw.
SICHERHEITSHINWEIS: PFEIFEN SIE NIEMALS, WENN SIE DAS ERGEBNIS NICHT VOLLSTÄNDIG VERSTEHEN ...
Hoffe das hilft ein paar Blockaden zu beseitigen :)
quelle
Installieren Sie
mmv
und führen Sie dann Folgendes aus:quelle