Ich habe Dateien mit dem Namen "12. 2017-04-11 063118.jpg" und "123. 2016-09-05 115236.jpg". Die Zahl links vom "." zählt wie ein Index von 1 bis 1400.
Wie kann ich das Erstellungsdatum und die Erstellungszeit gemäß der Angabe im Dateinamen für alle 1400 Dateien im Ordner einstellen? Ich weiß, dass der Befehl touch -t das Erstellungsdatum ändert, aber ich weiß nicht, wie ich die Datums- / Zeitinformationen aus dem Dateinamen extrahieren und in einen Befehl einfügen kann, sodass dies automatisch für alle Dateien durchgeführt wird.
Ich weiß aus einem anderen Thread, dass das untenstehende funktionieren sollte. Aber ich weiß nicht, wie ich die Textkonvertierung optimieren soll, um sie korrekt auf meine Dateinamenskonvention anzuwenden.
for f in *; do
t=$(echo $f | sed -E 's/([A-z]*-)|([ ,;])|(\..*)//g' | sed -E 's/(.*)(..)/\1.\2/')
touch -t $t "$f"
done
Der obige Code funktioniert, wenn meine Dateinamenskonvention wie folgt lautet: "clip-2014-01-31 18; 50; 15.mp4". Ich habe jedoch ein anderes Format: "12. 2017-04-11 063118.jpg" und "123. 2016-09-05 115236.jpg". Kann jemand den sed
Funktionsbefehl zwicken, um die Umwandlung in das korrekte Format für Note zu verarbeiten?
bare *
(glob) listet jedes Dateisystemobjekt im Verzeichnis auf. Denken Sie, dass die Verwendung*.jpg
eine bessere Wahl wäre?something_without_spaces YYYY[.|-|:]MM[.|-|:]DD hhmmSS.someextension
. Das Erstellungsdatum wird nicht geändert, wenn das erforderliche Format CCYYMMDDhhmm.SS falsch ist (z. B. Buchstaben enthält oder der Punkt fehlt).Da Sie gefragt haben, wie Sie das, was Sie bereits hatten, optimieren können, würden Sie die Erfassungsgruppen beim ersten Auftreten von so ändern
sed
, dass sie mit dem neuen Muster übereinstimmen, während Sie die zweitesed
unverändert lassen. Auch Doppel zitieren die$f
inecho "$f" |
.Beachten Sie jedoch, dass ich die Verwendung der Pipe und das zweite Vorkommen von
sed
,| sed ...
durch die Verwendung der-e
Option beseitigt habe, mit der die Bearbeitungsbefehle in eine Liste von Befehlen eingefügt werden.Hier ist es als Einzeiler optimiert:
Hier ist eine Erläuterung der Erfassungsgruppen im ersten
sed
Bearbeitungsbefehl:Was Sie mit
20160905115236
dem zweitensed
Bearbeitungsbefehl belässt und von ihm verarbeitet wird201609051152.36
,(.*)(..)
zerfällt in zwei Erfassungsgruppen, wobei die zweite die letzten beiden Zeichen und die erste alles andere enthält. Das.
wird in den Ersetzungsabschnitt gestellt, in dem/\1.\2/
beide Erfassungsgruppen rückverweist sind.quelle
Wenn die Dateien Exit-Tags enthalten, kann das kostenlose 'exiftool' den Dateinamen entsprechend den Werten in der Datei ändern. Wenn Sie es installieren, wird auch eine ausführliche Manpage installiert.
http://www.sno.phy.queensu.ca/~phil/exiftool/
Ich habe dieses Tool nicht nur zum Ändern von Dateinamen verwendet, sondern auch zum Schreiben von HTML-Ausschnitten, um die Dateien auf einer Webseite anzuzeigen.
quelle