Erstellen Sie Unterverzeichnisse und organisieren Sie Dateien nach Datum

7

Ich habe einige Verzeichnisse mit Dateien, die von meiner Überwachungskamera kopiert wurden und die ich nach Dateidatum in Unterverzeichnisse organisieren möchte. So zum Beispiel;

-rwxrwxrwx 0 root root 4935241 Jul 19  2012 DSCN1406.JPG
-rwxrwxrwx 0 root root 4232069 Jul 19  2012 DSCN1407.JPG
-rwxrwxrwx 0 root root 5015956 Jul 20  2012 DSCN1408.JPG
-rwxrwxrwx 0 root root 5254877 Jul 21  2012 DSCN1409.JPG

Ich möchte ein Skript, das ausgeführt wird, um die Dateien in diesem Verzeichnis anzuzeigen, und dann die 3 benötigten Verzeichnisse mit dem Namen like erstellen.

drwxrwxrwx 1 root root     0 Sep  2 16:49 07-19-2012
drwxrwxrwx 1 root root     0 Sep  2 16:49 07-20-2012
drwxrwxrwx 1 root root     0 Sep  2 16:49 07-21-2012

Verschieben Sie dann die Dateien in die entsprechenden Verzeichnisse. Hat jemand Vorschläge für einen guten skriptfähigen Weg, um dies zu erreichen?

Richard Ahlquist
quelle
Ist GNU findoder GNU statverfügbar?
Jordan

Antworten:

17

Unter Linux und Cygwin können Sie date -rdas Änderungsdatum einer Datei auslesen.

for x in *.JPG; do
  d=$(date -r "$x" +%Y-%m-%d)
  mkdir -p "$d"
  mv -- "$x" "$d/"
done

(Ich verwende das eindeutige, standardmäßige und einfach zu sortierende JJJJ-MM-TT-Format für Daten.)

Gilles 'SO - hör auf böse zu sein'
quelle
Perfekte Gilles, sobald ich das .jpg fallen ließ, funktionierte es wunderbar. Vielen Dank!
Richard Ahlquist
1
Diese dateFunktion war mir nicht bekannt , +1.
Jordanm
Ein kürzeres Datumsformat, wie% Y-% m-% d:date +%F
Ingopingo
0

Das Folgende ist ausfallsicher, da es in den Verzeichnispfad eingeht und Dateien innerhalb des Verzeichnisses organisiert. Dabei wird nur geprüft, ob es sich bei dem zu organisierenden Objekt um eine Datei handelt oder nicht.

dir="mention the directory path"; cd "$dir" ; for x in *; do if [ -f "$x" ]; then d=$(date -r "$x" +%Y/%B/%d) && mkdir -p "$d" && mv -- "$x" "$d/"; fi; done
Anurag Gupta
quelle