Assistant cronjob Bilder verschieben

Status
Für weitere Antworten geschlossen.

olivergiertz

Benutzer
Mitglied seit
12. Mrz 2014
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Hallo Zusammen,

ich habe da mal ein kleines Problem, eine Fragestellung. Über Dropbox erhalte ich auf der Synology Bilder in bestimmten Unterverzeichnissen. Diese würde ich gerne Stündlich in die Photostation verschieben, und zwar genau so wie sie im Bilder Verzeichnis lagen.

Beispiel:
/volume1/homes/USER/CloudStation/Bilder/VERZ1
/volume1/homes/USER/CloudStation/Bilder/VERZ2
/volume1/homes/USER/CloudStation/Bilder/VERZ3

Diese sollen nach
/volume1/photo/VERZ1
/volume1/photo/VERZ2
/volume1/photo/VERZ2

verschoben werden.

Derzeit geschieht das noch sehr umständlich auf folgendem Wege:

Rich (BBCode):
Start=/volume1/homes/USER/CloudStation/Bilder/
Ziel=/volume1/photo/

Verzeichnis="VERZ1"
find $Start"$Verzeichnis" -type f -name '*.jpg' -exec mv {} $Ziel"$Verzeichnis" \;
Verzeichnis="VERZ2"
find $Start"$Verzeichnis" -type f -name '*.jpg' -exec mv {} $Ziel"$Verzeichnis" \;
Verzeichnis="VERZ3"
find $Start"$Verzeichnis" -type f -name '*.jpg' -exec mv {} $Ziel"$Verzeichnis" \;

Ich würde es gerne flexibler gestalten, so das fehlende Verzeichnisse auch in der Photostation angelegt werden.

Ich hoffe ich konnte mich verständlich ausdrücken??
 
Mitglied seit
10. Jan 2014
Beiträge
393
Punkte für Reaktionen
0
Punkte
0
Du brauchst also die Felder 7-x aus dem Pfad "START", wenn man davon ausgeht, dass derFeldtrenner der Slash "/" ist.

find $START -type f -name '*.jpg' | while read PFAD
do
FELDER=$(echo "$PFAD" | cut -f7-50 -d/)
echo "mv $START/$FELDER $ZIEL/$FELDER"
done

Der Code ist ungeprüft, habe gerade nur ein Tablet zur Hand.
 

olivergiertz

Benutzer
Mitglied seit
12. Mrz 2014
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Kann mir das erst heut Abend genauer ansehen, der erste Test hat leider nicht funktioniert. Leider habe ich von hier aus, keinen Zugriff per SSH um eine Fehlermeldung zu erhalten. Melde mich heute Abend nochmals...
 

olivergiertz

Benutzer
Mitglied seit
12. Mrz 2014
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Habe einen Fehler gefunden, die Variablen waren falsch deklariert, allerdings habe ich in den Verzeichnissen noch eine Besonderheit... Die hatte ich leider vergessen zu erwähnen, die Verzeichnisse mit den Bildern sind folgendermaßen Geschrieben:

Vorname1
Name2, Vorname2
Name3, Vorname3

Mit dem Komma kommt der mv Befehl anscheinend nicht klar, es wird alles nach dem Komma abgeschnitten. Beim Echo Befehl klappt das leider...

Muss ich die Verzeichnisse umbenennen, oder gibt es noch eine andere Chance??
 

Merthos

Benutzer
Mitglied seit
01. Mai 2010
Beiträge
2.709
Punkte für Reaktionen
2
Punkte
84
Nee, das Leerzeichen ist das Problem. Daher immer bei Befehlen auch Anführungszeichen um Variablen packen.
 

olivergiertz

Benutzer
Mitglied seit
12. Mrz 2014
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Hallo Zusammen,

vielen Dank für eure Tatkräftige Unterstützung. Habe es soweit hinbekommen und noch ein klein wenig verfeinert.

Rich (BBCode):
START=/volume1/homes/USR/CloudStation/Bilder
ZIEL=/volume1/photo

find $START -type f -name '*.jpg' | while read PFAD
do
FELDER=$(echo "$PFAD" | cut -f7-50 -d/)
LAENGE=`expr index "$FELDER" /`
ORDNER=${FELDER:0:$LAENGE}

if [ -d "$ZIEL"/"$ORDNER" ]
then
mv $START/"$FELDER" "$ZIEL"/"$FELDER"
synoindex -a "$ZIEL"/"$FELDER"
else
mkdir "$ZIEL"/"$ORDNER"
mv $START/"$FELDER" "$ZIEL"/"$FELDER"
synoindex -a "$ZIEL"/"$FELDER"
fi
done

Es wird geprüft ob der Ordner im Ziel vorhanden ist, wenn nicht, dann wird dieser erst angelegt und dann die Datei verschoben. Danach wird direkt der Index der Photostation um die Datei erweitert.

Bisher konnte ich es leider nicht weiter testen, sollte aber soweit funktionieren.

Liebe Grüße

Olli
 
Mitglied seit
10. Jan 2014
Beiträge
393
Punkte für Reaktionen
0
Punkte
0
Nicht schlecht...aber leider zu kompliziert ;-)
mkdir -p "$(dirname "$START/$FELDER")"
ist die Abkürzung

dirname gibt den übergebenen Pfad ohne das letzte Element aus
mkdir -p legt den angegebenen Pfad an, falls dieser noch nicht existiert - inkl. eventuell noch nicht vorhandener Elternverzeichnisse

Aber tröste dich, ich kenne, trotz 20 Jahren Unix, auch nicht alle Befehle.
"expr index" kannte ich auch noch nicht....
 

xabano

Benutzer
Mitglied seit
17. Aug 2008
Beiträge
411
Punkte für Reaktionen
0
Punkte
22
Nicht schlecht...aber leider zu kompliziert ;-)
Wenn es nicht kompliziert sein soll, würde ich auch auf cut verzichten und stattdessen basename verwenden:
Rich (BBCode):
start="/volume1/homes/USR/CloudStation/Bilder/"
ziel="/volume1/photo/"

#Verzeichnis am Ziel anlegen, falls es noch nicht existiert
find $start -type d -mindepth 1 | while read i
do
i=$(basename "$i")

if ! [ -d "$ziel""$i" ]
then
mkdir "$ziel""$i"
fi

#Dateien verschieben
find "$start""$i" -name *jpg -exec mv {} "$ziel""$i"/ \;
synoindex -a "$ziel""$i"
done

Was soll geschehen, wenn es einen Dateinamen am Ziel bereits gibt? Ist es Absicht, dass die Datei dann überschrieben wird?
 
Mitglied seit
10. Jan 2014
Beiträge
393
Punkte für Reaktionen
0
Punkte
0
Wir sollten ein Unix-Forum aufmachen...


Ich glaube, du hast im 2. find ein maxdepth vergessen.
So würde er alle JPG auch in den Unterverzeichnissen finden und in das "oberste Unterverzeichnis" moven.


So, fehlt noch der Einzeiler,der alles in einem macht.
 
Zuletzt bearbeitet:

Merthos

Benutzer
Mitglied seit
01. Mai 2010
Beiträge
2.709
Punkte für Reaktionen
2
Punkte
84
rsync && rm
 

olivergiertz

Benutzer
Mitglied seit
12. Mrz 2014
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Was soll geschehen, wenn es einen Dateinamen am Ziel bereits gibt? Ist es Absicht, dass die Datei dann überschrieben wird?

Das dürfte nicht passieren. Bin der einzige der den Ordner mit Bilder füttert, entweder von iPhone oder vom Rechner...
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat