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
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 588549
Url: https://administrator.de/contentid/588549
Printed on: April 26, 2024 at 09:04 o'clock
6 Comments
Latest comment
Moin.
[OT]
[/OT]
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
Ordner in Zeile 1 anpassen und das Skript auf die Dateien los lassen. (Vorher einfach zum Testen einen Testordner mit ein paar Dateikopien erstellen)
f.
[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 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.
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
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
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....)Geeeeeniaaaaaaal! Vieeeelen lieben Dank! Geht das auch mit Linux (habe eine Synology im Einsatz)?
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