Die zweite ist perfekt zum Umbenennen von Dateien ohne Erweiterung! Vielen Dank!
anon58192932
2
Die zweite fügt eine Erweiterung für alle Dateien hinzu, nicht nur für die ohne Erweiterung
Jeff
5
Genau wie eine Notiz "${f%.jpg}"ist Bash Shell String Manipulation. `$ {string% substring}` Löscht die kürzeste Übereinstimmung von $ substring von der Rückseite von $ string.
Jichao
Warnung: Wenn Sie einen Ordner mit gemischten Erweiterungen haben, wissen Sie, dass das oben Genannte .jpgsogar zu normalen Dateien beiträgt.
Welche Version der Umbenennung verwenden Sie? Meins hat verschiedene Argumente:rename from to file...
B Johnson
1
Das Umbenennen ist in Perl enthalten, das Version 5.10.1 ist.
Kim Stebel
3
Dies funktioniert hervorragend mit der in Ubuntu enthaltenen Umbenennung (und daher schätze ich alle Debian-basierten Distributionen), viel weniger ausführlich als die Antwort von jm666.
Der obige Befehl ist für den Trockenlauf. Danach sollten Sie das "Echo" vor mv entfernen
BEARBEITEN
Einige Leute schlagen vor, dass hier "Zeilenargumente in Anführungszeichen setzen; Argumentaufteilung auf Pfaden mit Leerzeichen vermeiden" erforderlich sind .
Normalerweise ist diese Empfehlung wahr, in diesem Fall nicht. Denn hier %wird das nicht durch die Shell-Erweiterung ersetzt, sondern durch das xargsinterne (direkt), so dass das %auch bei Leerzeichen in Dateinamen korrekt ersetzt wird.
Einfache Demo:
$ mkdir xargstest
$ cd xargstest
# create two files with spaces in names
$ touch 'a b''c d'
$ find .-type f -print
./c d
./a b
# notice, here are spaces in the above paths#the actual xargs mv WITHOUT quotes
$ find .-type f -print | xargs -I % mv %%.ext
$ find .-type f -print
./a b.ext
./c d.ext
# the result is correct even in case with spaces in the filenames...
In meinem Fall war mir der Dateityp nicht bekannt, daher habe ich den Befehl mv mit Hilfe des Befehls file verwendet , um den Dateityp zu untersuchen und möglicherweise zu finden. Diese Lösung ist möglicherweise nicht für alle Dateien perfekt, da der Befehl file den Dateityp möglicherweise nicht erkennt, aber für mich meistens gut funktioniert hat.
for f in*;do ext=$(file $f | awk '{print $2;}'); mv -n "$f""$f.$ext";done
Mit awk wird das zweite Wort der Zeichenfolge entfernt, die aus der Befehlsdatei zurückgegeben wird , die eigentlich die Erweiterung ist.
--dry-runund -asind in meiner Version von nicht verfügbar rename. Wenn dies für eine bestimmte Architektur spezifisch ist, sollte dies angegeben werden.
Es öffnet Ihren $ EDITOR mit allen Dateinamen oder vim standardmäßig und Sie können einfach das Ende aller Dateinamen mit Strg + v + G in vim markieren, die Datei speichern, beenden und alle Ihre Dateien umbenennen
mv "${file}" "${file}.jpg"
?Antworten:
quelle
"${f%.jpg}"
ist Bash Shell String Manipulation. `$ {string% substring}` Löscht die kürzeste Übereinstimmung von $ substring von der Rückseite von $ string..jpg
sogar zu normalen Dateien beiträgt.Sie können die Umbenennung verwenden:
quelle
rename from to file...
Ein anderer Weg - ohne Schleifen
Nervenzusammenbruch:
Der obige Befehl ist für den Trockenlauf. Danach sollten Sie das "Echo" vor mv entfernen
BEARBEITEN Einige Leute schlagen vor, dass hier "Zeilenargumente in Anführungszeichen setzen; Argumentaufteilung auf Pfaden mit Leerzeichen vermeiden" erforderlich sind .
Normalerweise ist diese Empfehlung wahr, in diesem Fall nicht. Denn hier
%
wird das nicht durch die Shell-Erweiterung ersetzt, sondern durch dasxargs
interne (direkt), so dass das%
auch bei Leerzeichen in Dateinamen korrekt ersetzt wird.Einfache Demo:
quelle
Einfach, CD in das Verzeichnis, in dem sich Ihre Dateien befinden und:
quelle
for f in *;do mv "$f" "$f".jpg;done
Leerzeichen in Dateinamen unterstützt würden.Probelauf:
tatsächliche Umbenennung:
quelle
quelle
In meinem Fall war mir der Dateityp nicht bekannt, daher habe ich den Befehl mv mit Hilfe des Befehls file verwendet , um den Dateityp zu untersuchen und möglicherweise zu finden. Diese Lösung ist möglicherweise nicht für alle Dateien perfekt, da der Befehl file den Dateityp möglicherweise nicht erkennt, aber für mich meistens gut funktioniert hat.
Mit awk wird das zweite Wort der Zeichenfolge entfernt, die aus der Befehlsdatei zurückgegeben wird , die eigentlich die Erweiterung ist.
quelle
quelle
--dry-run
und-a
sind in meiner Version von nicht verfügbarrename
. Wenn dies für eine bestimmte Architektur spezifisch ist, sollte dies angegeben werden.Sie können mehrere Dateien verschieben . Ich bin ein Betreuer dieses Projekts. Die Syntax ist einfach.
Es öffnet Ihren $ EDITOR mit allen Dateinamen oder vim standardmäßig und Sie können einfach das Ende aller Dateinamen mit Strg + v + G in vim markieren, die Datei speichern, beenden und alle Ihre Dateien umbenennen
quelle
Ryan Li
Die richtige Syntax zum Hinzufügen einer Dateierweiterung zu mehreren Dateien in einem Verzeichnis, die keine Dateierweiterung haben, lautet
quelle