Ordner in einen anderen Ordner verschieben mittels Skript?

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

Freakhouse

Benutzer
Registriert
15. Apr. 2013
Beiträge
114
Reaktionspunkte
0
Punkte
16
Ich habe im Root-Verzeichnis meiner DS einen Ordner (Order1) liegen, der wiederum diverse Unterordner und Dateien enthält. Nun möchte ich ein Skript laufen lassen, dass überprüft, ob im Rootverzeichnis der DS ein Ordner2 existiert. Wenn Ordner2 existiert, soll der komplette Ordner1 samt aller Unterordner und Dateien in Ornder2 verschoben werden. Mein Problem ist nun, dass Ordner1 regelmäßig mit neuen Dateien gefüllt wird. Es soll nun bei jedem Aufruf des Skripts der komplette Ordner1 mit Ordner2 "zusammengeführt" werden, ohne dass die bereits im Ordner2 vorhandenen Unterordner und Dateien überschrieben werden (die Namen der einzelnen Dateien sind immer unterschiedlich, die Namen der Unterordner jedoch nicht).

So sieht mein Script bisher aus:

if [ -d /Ordner2 ]; then
echo 'Ordner2 existiert'
mv /Ordner1 /Ordner2
else
echo 'Ordner2 existiert nicht'
fi

Das klappt aber leider nur im ersten Durchgang. Beim zweiten Aufruf des Skripts erhalte ich die Fehlermeldung
can't remove '/Ordner2/Ordner1': Is a directory

Hat jemand von euch einen Tipp für mich?
 
Du solltest dir u.a. hierüber nochmal Gedanken machen:

Code:
mv /Ordner1 /Ordner2

Das bewirkt nämlich nur, dass Ordner1 in Ordner2 umbenannt wird.
 
Richtig, läßt sich ja leicht verifizieren.
 
Ich muss mich korrigieren, habe doch nicht genug verifiziert. :/ Auch ohne abschließenden Slash wird verschoben, wenn unter dem Zielnamen bereits ein Verzeichnis existiert. Zumindest unter eine bash ist das so. Meiner Meinung nach ist mv nicht der richtige Ansatz für das, was Du machen willst. Möglicherweise gehts per rsync (ohne Option --delete) und anschließendem Löschen der Quelle, aber das müsste man 'mal testen.
 
Ja, habe auch gerade registriert, dass du ja zu Beginn zunächst prüfst, ob Ordner2 existiert und nur dann kommt mv zum tragen.

Ich nehme also erstmal alles zurück, habe auch vorerst keine spontane Lösung (hier ist's auch gerade ziemlich war und mein Kopf etwas zugekleistert...) :-/
 
Mit dem Befehl

if [ -d /Ordner2 ]; then
echo 'Ordner2 existiert'
cp -r -p /Ordner1 /Ordner2
else
echo 'Ordner2 existiert nicht'
fi

scheint es zu funktionieren. Allerdings müsste dann noch nach dem Kopieren der Ordner1 samt Inhalt gelöscht werden.
 
cp -Rp ist auch eine gute Lösung. Du solltest nur genau testen, was passiert, wenn eine Datei, die kopiert werden soll, am Ziel schon existiert, und ob das Deinen Anforderungen entspricht. Rsync testet das, cp m.E. nicht.
 
Doch, das prüft cp. Die Option '-u' bei cp sollte ein File nur kopieren, wenn es am Zielort noch nicht existiert oder wenn die Quelldatei neuer ist als die Datei am Zielort.
 
"--update", die kannte ich noch nicht. Besten Dank!
 
Immer wieder gerne... :)
 
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