Es tut mir leid, wenn der Fragetitel nicht informativ genug ist. Bitte zögern Sie nicht, eine bessere Variante vorzuschlagen.finden, xargs: Befehlskette für jede Datei ausführen
Ich möchte die folgende Aufgabe ausführen: In einem Verzeichnis habe ich eine Reihe von Dateien, die Fotos im JPEG-Format sind. Ich möchte aus EXIF die Daten extrahieren, wann diese Fotos aufgenommen wurden, ein neues Verzeichnis für jedes Datum erstellen und eine Datei in das entsprechende Verzeichnis verschieben.
(EXIF-Datum und die Uhrzeit haben das Format YYYY:MM:DD hh:mm:ss
, und ich möchte, dass die Verzeichnisnamen als YYYY-MM-DD
formatiert werden, das ist, warum ich sed verwenden)
Ich weiß, eine Art, wie jede dieser Aufgaben separat durchzuführen, aber versäumt, sie zusammen zu setzen. Ich verbrachte einige Zeit zu untersuchen, wie Befehle mit find
mit -exec
oder xargs
ausgeführt werden, aber immer noch nicht verstehen, wie Sie alles richtig verketten.
Schließlich konnte ich meine Aufgabe mit zwei Befehle erfüllen:
find . -name '*.jpg' -exec sh -c "identify -format %[exif:DateTimeOriginal] {}
| sed 's/ [0-9:]*//; s/:/-/g' | xargs mkdir -p" \;
find . -name '*.jpg' -exec sh -c "identify -format %[exif:DateTimeOriginal] {}
| sed 's/ [0-9:]*//; s/:/-/g; s/$/\//' | xargs mv {}" \;
Aber ich weiß nicht wie die Vervielfältigung, und ich weiß nicht wie -exec sh -c
. Gibt es den richtigen Weg, dies in einer Zeile und ohne -exec sh -c
zu tun?