Hallöchen liebe Foren Gemeinde,
ich bin sehr neu in der Linux Community, und komme gleich mit einer großen Frage. Ich war bisher nur als Admin in einer kleinen Windows Umgebung unterwegs. Nun ist jedoch ein Linux Fileserver dazu gekommen.
Nun zu meiner Aufgabenstellung. 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.
Als Beispiel ....
Die vorhandenen Verzeichnisse als Beispiel.
/tmp/5b2a4b6add4a1 (Erstelldatum Januar 2018)
/tmp/5b2a6c68528d4 (Erstelldatum Maerz 2018)
/tmp/5b2d0fe250422 (Erstelldatum Mai 2019)
/tmp/5b2f6e880638b (Erstelldatum Juni 2020)
Die Ordner haben jedoch keine eindeutige Kennzeichnung wann der Ordner erstellt wurde. Hier bin ich auf das Geburtsdatum (Erstelltag) des Ordners angewiesen.
Wenn jetzt also der Ordner /tmp/5b2a4b6add4a1 im Januar 2018 erstellt wurde, so soll das Script dies erkennen, einen neuen Ordner /finished_orders/2018/ anlegen, darin das Verzeichnis 01 und den Ordner 5b2a4b6add4a1 aus dem Ordner /tmp/ in das Verzeichnis /finished_orders/2018/01/5b2a4b6add4a1 verschieben.
Wie kann ich das am einfachsten realisieren. Bin in der Shell Programmierung (egal ob Bash oder Python) absoluter Neuling.
Die Anforderung unserer Webprogrammierer wäre dann dieses Ergebnis.
/tmp/5b2a4b6add4a1 --> /finished_orders/2018/6/5b2a4b6add4a1
/tmp/5b2a6c68528d4 --> /finished_orders/2018/6/5b2a6c68528d4
/tmp/5b2d0fe250422 --> /finished_orders/2018/6/5b2d0fe250422
/tmp/5b2f6e880638b --> /finished_orders/2018/6/5b2f6e880638b
Ich hoffe Ihr könnt mir in der Angelegenheit weiter helfen, dies zu realisieren.
Liebe Grüße bis dahin.
Diese Website existiert nur weil wir Werbung mit AdSense ausliefern.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.
Bitte den AdBlocker daher auf dieser Website ausschalten! Danke.
Ordner nach erstelldatum in neue Verzeichnisse umkopieren
Moderator: Moderatoren
-
- Hacker
- Beiträge: 627
- Registriert: 23. Jun 2008, 20:51
Re: Ordner nach erstelldatum in neue Verzeichnisse umkopieren
/tmp/5b2d0fe250422 = 22.Juni 2018 - 17:04 *
/tmp/5b2f6e880638b = 24.Juni 2018 - 12:12 **
Schau nach ob das richtig ist
Re: Ordner nach erstelldatum in neue Verzeichnisse umkopieren
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.
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.
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
wie folgt Verzeichnisse angezeigt und verschoben. die Dateien werden als Argument dem Script übergeben hier mit Wildcard als "5*"
Ergebnis:
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
nbraetter hat geschrieben: ↑9. Mär 2021, 14:35 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: Alles auswählen
#!/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
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: Alles auswählen
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
Code: Alles auswählen
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
Code: Alles auswählen
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 gesagt, alles ohne Gewähr.
robi
Re: Ordner nach erstelldatum in neue Verzeichnisse umkopieren
Hallöchen in die Runde.
vielen Dank für die Lösungsansätze. Das mit dem Zeitstempel nach HEX Wert war tatsächlich etwas unsicher. Beim 2. Verzeichnis passte es. Die Daten oben sind allerdings tatsächlich "nur beispiele". Die Datumsangaben sind frei erfunden.
Ein Backup habe ich synchron zu den vorhandenen Daten. Das stellt kein Problem dar. Ausserdem steht das system aktuell noch in der Entwicklung. Also von da her haben wir uns ganz willkürlich Daten aus unserem Backup gepickt, diese alle Wahrlos in ein Verzeichnis gepackt, um einen kleinen Test Datenbestand zu haben.
Ich werde dein Script mal austesten, und berichten wie es funktioniert.
vielen Dank für die Lösungsansätze. Das mit dem Zeitstempel nach HEX Wert war tatsächlich etwas unsicher. Beim 2. Verzeichnis passte es. Die Daten oben sind allerdings tatsächlich "nur beispiele". Die Datumsangaben sind frei erfunden.
Ein Backup habe ich synchron zu den vorhandenen Daten. Das stellt kein Problem dar. Ausserdem steht das system aktuell noch in der Entwicklung. Also von da her haben wir uns ganz willkürlich Daten aus unserem Backup gepickt, diese alle Wahrlos in ein Verzeichnis gepackt, um einen kleinen Test Datenbestand zu haben.
Ich werde dein Script mal austesten, und berichten wie es funktioniert.