Was hier Gräfin Klara wohl meint, ist die Vermutung das hier in den ersten 8 HEX-ziffern die Erstellungszeit des Verzeichnisses kodiert ist, möglich, halte ich aber wegen der Abweichungen in den Beispielen für unwahrscheinlich.
nbraetter schrieb:
Ich habe einen relativ großen Verzeichnisbaum mit Bilderordnern zu verwalten.
Diese sind bisher nur nach Kunden sortiert mit Unterverzeichnissen nach Monaten.
Jetzt soll Ich als Admin die Ordner nach erstelldatum raus filtern und in neue Verzeichnisse umkopieren oder verschieben.
hier lauern einige Gefahren, denen du dir bewusst sein solltest. Es ist sicherlich nicht sonderlich schwer hier mit einem fehlerhaften Script auch Datenverlust zu provozieren, ich möchte das nicht alles im einzelnen aufzählen wo die Probleme überall lauern könnten. Das Beste ist, du bist dir vor irgendwelchen Aktionen Sicher, dass du ein Backup von diesen Dateien hast, das dieses auch okay ist, und das du eine Vorstellung hast, wie du notfalls wieder an die Daten im Backup kommen kannst. Prinzipiell wird dir hier im Forum wohl niemand etwas in die Hand geben worauf Garantie und Gewährleistung gegeben wird, das es ohne Probleme und ohne Datenverlust abläuft, natürlich auch ich nicht.
Problem hier sind einerseits, es sind ganze Verzeichnisse die verschoben werden oder kopiert werden sollen.
Von Verzeichnissen kann man unter Linux keine Hardlinks erstellen, (damit würde es weniger Gefährlich zu realisieren sein), und ein Problem sehe ich auch noch, die Zeitstempel der Verzeichnisse sind wohl aktuell die einzige Grundlage des Sortieralgorithmus und da sollte man sehr gut aufpassen das man sich diese nicht bei irgendwelchen unausgegoren Tests zerstört.
Eine gute Möglichkeit dieses per Script zu erledigen ist sicherlich ein Ansatz über Archive zu programmieren, cpio, tar, oder gleich über scp . Es gibt auch unzählige Hilfstools zum Verschieben und umbenennen von Dateien und Verzeichnissen, aber das macht es aber wahrscheinlich auch nicht einfacher, weil man eben oft keinen Standardsortierwunsch sondern Sonderwünsche hat.
hier aber mal ein kleines Script, das die Verzeichnisse verschieben würde.
Code:
#!/bin/bash
#Verschiebt Verzeichnisse in Unterverzeichnisse entsprechende der Modifiaktionszeit des Verzeichnisses
# Aufruf: ./Script.sh Verzeichnisse
#Bitte hier bei NEWDIR das Verzeichnis angeben in das verschoben werden soll
#Verzeichnis wird angelegt wenn es nicht existieren sollte, Schreibrechte vorausgesetzt
NEWDIR="/home/robi/tmp/"
mkdir -p ${NEWDIR}
for DIR in $@
do
# Ermitteln der Verzeichniszeit und erstellen die Unterverzeichnisnamen
DTime=$(stat -c "%y" ${DIR})
TIME=${DTime::8}
TIME=${TIME//-/\/}
# Zur Kontrolle welcher Befehlszeile das Script ermittelt hat
echo "mv ${DIR} ${NEWDIR}${TIME}$(basename $DIR)"
# die folgenden 3 Zeilen sind die eigentliche Ausfuehrung des Kommandos
# diese sind hier noch auskommentiert
# mkdir -p ${NEWDIR}${TIME}
# mv ${DIR} ${NEWDIR}${TIME}$(basename $DIR)
# touch -d ${DTime} ${NEWDIR}${TIME}$(basename $DIR)
done
Es sind einige Kommentare im Script, und die 3 Zeilen die letztlich die Verzeichnisse verschieben sind auskommentiert. Es muss also oben noch das Verzeichnis eingegeben werden, wo das hin soll, dann kann man schon mal testen was es machen würde. Bevor man die 3 Arbeitszeilen auskommentiert.
Das Script hat noch ein paar Schwächen, zB. Fehler werden nicht abgefangen, Es wird nicht geprüft ob überhaupt am Ziel genug Platz ist, und vor allem, darf man hier nicht ein paar hundert Tausend Verzeichnisse auf einmal im Kommando angeben, man läuft sonst bei tausenden von Verzeichnissen eventuell in das Problem das die Kommandozeile nicht unendlich lang sein darf, also immer nur ein paar hundert Verzeichnisse gleichzeitig mit einem Scriptaufruf verschieben wollen, so viele sollte schon gehen.
Habe mal ein paar Testdatein nach den Vorgaben die ich hier gefunden habe, erstellt
Code:
robi@localhost:/tmp> find 5* -ls
1572911 4 drwxr-xr-x 2 robi users 4096 Jan 24 2018 5b2a4b6add4a1
1572916 0 -rw-r--r-- 1 robi users 0 Jan 24 2018 5b2a4b6add4a1/File_2.jpg
1572915 0 -rw-r--r-- 1 robi users 0 Jan 24 2018 5b2a4b6add4a1/File_1.jpg
1572917 0 -rw-r--r-- 1 robi users 0 Jan 24 2018 5b2a4b6add4a1/File_3.jpg
1572912 4 drwxr-xr-x 2 robi users 4096 Mär 5 2018 5b2a6c68528d4
1572919 0 -rw-r--r-- 1 robi users 0 Mär 5 2018 5b2a6c68528d4/File_2.jpg
1572918 0 -rw-r--r-- 1 robi users 0 Mär 5 2018 5b2a6c68528d4/File_1.jpg
1572920 0 -rw-r--r-- 1 robi users 0 Mär 5 2018 5b2a6c68528d4/File_3.jpg
1572913 4 drwxr-xr-x 2 robi users 4096 Mai 10 2019 5b2d0fe250422
1572922 0 -rw-r--r-- 1 robi users 0 Mai 10 2019 5b2d0fe250422/File_2.jpg
1572921 0 -rw-r--r-- 1 robi users 0 Mai 10 2019 5b2d0fe250422/File_1.jpg
1572923 0 -rw-r--r-- 1 robi users 0 Mai 10 2019 5b2d0fe250422/File_3.jpg
1572914 4 drwxr-xr-x 2 robi users 4096 Jun 13 2020 5b2f6e880638b
1572925 0 -rw-r--r-- 1 robi users 0 Jun 13 2020 5b2f6e880638b/File_2.jpg
1572924 0 -rw-r--r-- 1 robi users 0 Jun 13 2020 5b2f6e880638b/File_1.jpg
1572926 0 -rw-r--r-- 1 robi users 0 Jun 13 2020 5b2f6e880638b/File_3.jpg
wie folgt Verzeichnisse angezeigt und verschoben. die Dateien werden als Argument dem Script übergeben hier mit Wildcard als "5*"
Code:
robi@localhost:/tmp> ls -ld 5*
drwxr-xr-x 2 robi users 4096 24. Jan 2018 5b2a4b6add4a1
drwxr-xr-x 2 robi users 4096 5. Mär 2018 5b2a6c68528d4
drwxr-xr-x 2 robi users 4096 10. Mai 2019 5b2d0fe250422
drwxr-xr-x 2 robi users 4096 13. Jun 2020 5b2f6e880638b
robi@localhost:/tmp> ./test.sh 5*
mv 5b2a4b6add4a1 /home/robi/tmp/2018/01/5b2a4b6add4a1
mv 5b2a6c68528d4 /home/robi/tmp/2018/03/5b2a6c68528d4
mv 5b2d0fe250422 /home/robi/tmp/2019/05/5b2d0fe250422
mv 5b2f6e880638b /home/robi/tmp/2020/06/5b2f6e880638b
Ergebnis:
Code:
robi@localhost:/tmp> find /home/robi/tmp -ls
1704042 4 drwxr-xr-x 5 robi users 4096 Mär 9 23:09 /home/robi/tmp
1704236 4 drwxr-xr-x 3 robi users 4096 Mär 9 23:09 /home/robi/tmp/2020
1704238 4 drwxr-xr-x 3 robi users 4096 Mär 9 23:09 /home/robi/tmp/2020/06
1704239 4 drwxr-xr-x 2 robi users 4096 Jun 13 2020 /home/robi/tmp/2020/06/5b2f6e880638b
1704242 0 -rw-r--r-- 1 robi users 0 Jun 13 2020 /home/robi/tmp/2020/06/5b2f6e880638b/File_2.jpg
1704241 0 -rw-r--r-- 1 robi users 0 Jun 13 2020 /home/robi/tmp/2020/06/5b2f6e880638b/File_1.jpg
1704243 0 -rw-r--r-- 1 robi users 0 Jun 13 2020 /home/robi/tmp/2020/06/5b2f6e880638b/File_3.jpg
1704137 4 drwxr-xr-x 3 robi users 4096 Mär 9 23:09 /home/robi/tmp/2019
1704138 4 drwxr-xr-x 3 robi users 4096 Mär 9 23:09 /home/robi/tmp/2019/05
1704139 4 drwxr-xr-x 2 robi users 4096 Mai 10 2019 /home/robi/tmp/2019/05/5b2d0fe250422
1704166 0 -rw-r--r-- 1 robi users 0 Mai 10 2019 /home/robi/tmp/2019/05/5b2d0fe250422/File_2.jpg
1704164 0 -rw-r--r-- 1 robi users 0 Mai 10 2019 /home/robi/tmp/2019/05/5b2d0fe250422/File_1.jpg
1704230 0 -rw-r--r-- 1 robi users 0 Mai 10 2019 /home/robi/tmp/2019/05/5b2d0fe250422/File_3.jpg
1704045 4 drwxr-xr-x 4 robi users 4096 Mär 9 23:09 /home/robi/tmp/2018
1704128 4 drwxr-xr-x 3 robi users 4096 Mär 9 23:09 /home/robi/tmp/2018/03
1704133 4 drwxr-xr-x 2 robi users 4096 Mär 5 2018 /home/robi/tmp/2018/03/5b2a6c68528d4
1704135 0 -rw-r--r-- 1 robi users 0 Mär 5 2018 /home/robi/tmp/2018/03/5b2a6c68528d4/File_2.jpg
1704134 0 -rw-r--r-- 1 robi users 0 Mär 5 2018 /home/robi/tmp/2018/03/5b2a6c68528d4/File_1.jpg
1704136 0 -rw-r--r-- 1 robi users 0 Mär 5 2018 /home/robi/tmp/2018/03/5b2a6c68528d4/File_3.jpg
1704115 4 drwxr-xr-x 3 robi users 4096 Mär 9 23:09 /home/robi/tmp/2018/01
1704119 4 drwxr-xr-x 2 robi users 4096 Jan 24 2018 /home/robi/tmp/2018/01/5b2a4b6add4a1
1704125 0 -rw-r--r-- 1 robi users 0 Jan 24 2018 /home/robi/tmp/2018/01/5b2a4b6add4a1/File_2.jpg
1704124 0 -rw-r--r-- 1 robi users 0 Jan 24 2018 /home/robi/tmp/2018/01/5b2a4b6add4a1/File_1.jpg
1704127 0 -rw-r--r-- 1 robi users 0 Jan 24 2018 /home/robi/tmp/2018/01/5b2a4b6add4a1/File_3.jpg
Wie zu sehen sind hier die Zeitstempel der Verzeichnisse wieder original gesetzt worden. Die Dateien haben auch wieder die richtigen Zeitstempel.
wie gesagt, alles ohne Gewähr.
robi