maxx2019
Goto Top

Dateien rekursiv sortieren (Untervezeichnisse anlegen und Dateien darin verschieben)

Hey,
wurde vor ein paar Wochen stolzer Papa. Wir haben bislang gefühlt tausende Bilder und Videos gemacht. 🙈🙉🙊
Bislang landen alle Dateien der Bilder und Videos in einem Ordner.
Dateinamen:
VID_20200627_153322.mp4
IMG_20200627_193437.jpg
20200622_204313.jpg
20200622_202141.mp4
Nun wünscht sich die liebe Mama der Kleinen, dass die Bilder alle automatisch sortiert werden.
Die Kleine wurde am 12.06.2020 geboren. Es sollen alle Videos und Bilder automatisch in einen Unterordner für die Lebenswoche nach dem Muster "LJ_01/LW_01" verschoben werden (=1. Lebensjahr, 1. Lebenswoche). Damit es übersichtlich bleibt, soll der Unterordner erst angelegt werden, wenn es auch Bilder und Videos gibt.
Ausgehend vom Geburtsdatum 12.06.2020 würden alle Bilder und Videos vom 12.06.2020 bis einschließlich 18.06.2020 in den Unterordner "LJ_01/LW_01" verschoben werden. Die vom 19.06.2020 bis 24.06.2020 in den Unterordner "LJ_01/LW_02".
Bin leider kein Held was die Shell angeht. Aber da gibts so unfassbar viele Möglichkeiten. Geht das Vorhaben auch? Würde mich riesig über Unterstützung freuen!
Liebe Grüße
Max

Content-Key: 588549

Url: https://administrator.de/contentid/588549

Printed on: April 26, 2024 at 09:04 o'clock

Mitglied: 144705
Solution 144705 Jul 17, 2020 updated at 15:24:07 (UTC)
Goto Top
Moin.
[OT]
wurde vor ein paar Wochen stolzer Papa.
Glückwunsch! 👶 Da hat der Papa Nachts gaaaaanz viel Zeit mit dem kleinen in der Schaukel vor dem Rechner zu sitzen und 💩 zu entsorgen face-big-smile duck und wech ... 🙈
[/OT]
Geht das Vorhaben auch?
Auf jeden Fall!

Da du jetzt keine Script oder Programmiersprache angegeben hast hier das ganze mal als Powershell-Skript:

Ich gehe jetzt im Skript einfach mal davon aus, dass du das Datum aus dem Dateinamen (im Format yyyyMMdd_HHmmss) nutzen willst und nicht die Datumswerte des Dateisystems.
Ordner in Zeile 1 anpassen und das Skript auf die Dateien los lassen. (Vorher einfach zum Testen einen Testordner mit ein paar Dateikopien erstellen)
$folder = 'D:\Bilder'  
$birthdate = get-date '12.06.2020'  
ls $folder -File | ?{$_.Basename  -match '\d{8}_\d{6}'} | group {$d=[datetime]::ParseExact($matches,'yyyyMMdd_HHmmss',[cultureinfo]::InvariantCulture);'LJ_{0:d2}/LW_{1:d2}' -f ([int][math]::Ceiling((($d-$birthdate).TotalDays / 365))),([int][math]::Ceiling(((($d - $birthdate).TotalDays % 365) / 7)))} | %{  
    $ziel = "$folder\$($_.Name)"  
    if(!(Test-Path $ziel)){md $ziel -Force | out-null}
    $_.Group | move-item -Destination $ziel -Force -Verbose
}

f.
Member: erikro
erikro Jul 17, 2020 at 17:05:13 (UTC)
Goto Top
Moin,

herzlichen Glückwunsch!

Ich würde für sowas nach einer Fotoverwaltungssoftware suchen. Das hätte den Vorteil, dass man sie nicht nur nach Datum, sondern auch nach anderen Kriterien wie "Kind krabbelt", "Kind spielt", "Kind hat sich eingesaut" ;- ) ... sortieren kann. Dann spart man sich auch das umsortieren in andere Ordner usw.

hth

Erik
Member: Maxx2019
Maxx2019 Jul 21, 2020 at 06:40:11 (UTC)
Goto Top
Zitat von @144705:
Glückwunsch! 👶 Da hat der Papa Nachts gaaaaanz viel Zeit mit dem kleinen in der Schaukel vor dem Rechner zu sitzen und 💩 zu entsorgen face-big-smile duck und wech ... 🙈
Danke! face-smile Der Papa muss Nachts schlafen und das klappt auch ganz gut. Hab da andere Einsatzzeiten...😁

Auf jeden Fall!

Da du jetzt keine Script oder Programmiersprache angegeben hast hier das ganze mal als Powershell-Skript:

Geeeeeniaaaaaaal! Vieeeelen lieben Dank! Geht das auch mit Linux (habe eine Synology im Einsatz)?
Member: Maxx2019
Maxx2019 Jul 21, 2020 at 06:43:05 (UTC)
Goto Top
Zitat von @erikro:
herzlichen Glückwunsch!

Ich würde für sowas nach einer Fotoverwaltungssoftware suchen. Das hätte den Vorteil, dass man sie nicht nur nach Datum, sondern auch nach anderen Kriterien wie "Kind krabbelt", "Kind spielt", "Kind hat sich eingesaut" ;- ) ... sortieren kann. Dann spart man sich auch das umsortieren in andere Ordner usw.

Hatten wir ergänzend auch schon dran gedacht, aber nix passendes gefunden.

Wir verschlagworten die Lebenswochen im Nachgang im Ordnernamen. So finden wir auch markante Ereignisse wieder. face-smile Ordner sind uns wichtig, weil wir mit unterschiedlichen Plattformen arbeiten und Ordner einfach immer funktionieren.
Mitglied: 144705
Solution 144705 Jul 21, 2020 updated at 15:28:05 (UTC)
Goto Top
Zitat von @Maxx2019:
Geeeeeniaaaaaaal! Vieeeelen lieben Dank! Geht das auch mit Linux (habe eine Synology im Einsatz)?
Joa. Gibt zwar die Powershell auch für Linux aber unter Linux dann gleich per Bash (alternativ geht natürlich auch Perl, Python & Co....)
Hier das Beispiel mit plain bash:
#!/bin/sh
FOLDER="/path/to/your/files"  
BIRTHDATE=$(date -d '2020-06-12' +%s)  
find "$FOLDER" -type f \( -iname '*.jpg' -or -iname '*.mp4' \) -print0 | while IFS= read -r -d '' file  
do
        filedate=$(date -d "$(basename "$file" | grep -Eo '[0-9]{8}')" +%s)  
        years=$(printf '%02d' $(( ($filedate - $BIRTHDATE) / (86400 * 365) + 1)))  
        weeks=$(printf '%02d' $(( ((($filedate - $BIRTHDATE) % (86400 * 365)) / (86400 * 7)) + 1 )))  
        target="${FOLDER}/LJ_${years}/LW_${weeks}/"  
        [[ ! -d "$target" ]] && mkdir -p "$target"  
        mv "$file" "$target"  
done
Machst du dir halt einfach einen cronjob oder lässt das über inotify automatisch auf der Syno triggern.
Member: Maxx2019
Maxx2019 Jul 23, 2020 at 16:07:54 (UTC)
Goto Top
Zitat von @144705:
Joa. Gibt zwar die Powershell auch für Linux aber unter Linux dann gleich per Bash (alternativ geht natürlich auch Perl, Python & Co....)
Hier das Beispiel mit plain bash:
...
Machst du dir halt einfach einen cronjob oder lässt das über inotify automatisch auf der Syno triggern.

Hammer!!! Mega!!! Vielen lieben Dank! Du bist mein persönlicher Held des Monats! 😊