Shell - Dateien verschieben mit Muster

Meilenstein

Mitglied
Thread Starter
Mitglied seit
15.01.2005
Beiträge
427
Hallo zusammen
habe durch eine falsche Einstellung jetzt in einem Verzeichnis knapp 1 Mio. Dateien, so dass ich Probleme habe mir diese Stichprobenartig überhaupt ansehen zu können.
Die Dateien sehen vom Dateinamen etwa wie folgt aus. 2020-09-01_xx_yy_abc.jpg
Heißt am Anfang ist immer das Erstellungsdatum der Datei im Dateinamen vorhanden, danach kommen je nach Datei noch weitere Buchstaben, (Sonderzeichen), Ziffern, je nachdem. Länge des Dateinamens ist immer gleich

Meine Idee wäre jetzt, das ganze ein wenig zu sortieren in Unterordner, welche mit dem Datum beginnen, so dass ich alle Dateien vom 2020-09-01 in einen Ordner verschiebe der dieses Datum trägt. usw.
So wäre das ganze aufgeteilt und ich könnte in Stichproben einzelne Tage ansehen.

Leider bin ich mit Shell Programmierung nicht fit. Ich kann die Scripte zwar lesen und auch meist verstehen was sie tun, nicht jedoch selbst schreiben.
Könnt ihr mir hier weiterhelfen oder zumindest einen Ansatz liefern mit welchem ich weiterarbeiten könnte?
Vielen Dank schon einmal vorab.
 

oneOeight

Mitglied
Mitglied seit
23.11.2004
Beiträge
54.539
mkdir 2020-09-01
mv 2020-09-01_* 2020-09-01

Das wäre die grobe Grundstruktur.
Das kannst noch weiter verschönern, automatisch die Ordner aus dem Datum erstellen mit regexp erstellen usw.
 

tigion

Mitglied
Mitglied seit
21.06.2006
Beiträge
1.152
Code:
#!/bin/bash
for file in `find *.jpg -maxdepth 0 -type f`; do
  folder="_review/"`echo $file | cut -d_ -f1`
  mkdir -p "${folder}"
  cp "${file}" "${folder}/"
done
So auf die schnelle ohne größere Prüfungen. Das Script müsste alle Dateien im aktuellen Verzeichnis, welche auf '.jpg' enden nehmen und unter '_preview' ein Verzeichnis mit dem Teil vor dem ersten '_' erstellen und die Dateien dann hinein kopieren.
 

Meilenstein

Mitglied
Thread Starter
Mitglied seit
15.01.2005
Beiträge
427
Super danke Euch für die Tips!
Hab das Shellskript mal bei einem anderen Ordner testweise ausprobiert. sieht sehr gut aus! Danke auch für die anderen Tips, werde ich mir bei Gelegenheit ebenfalls einmal ansehen.

Nachtrag:
zu früh gefreut, bekomme folgende Fehlermeldung:
Bash:
./verschieben.sh: line 6: /opt/bin/find: Argument list too long