mv in schleife

20/09/2011 - 12:49 von Stefan Enzinger | Report spam
Erstmal sorry wegen dem subject, aber mir fàllt nichts besseres ein.

Für ein Backupskript (Bash) möchte ich Ordner umbenennen (deren Nummer
erhöhen)
days_to_keep
echo "renaming backups..."
for (( i=days_to_keep; i>0; i--))
do
mv -f "${backup_base}/backup$((i-1))" "${backup_base}/backup$((i))"
done

mv -f "$incoming_backup" "${backup_base}/backup0"

Das geht soweit gut, nur manchmal bekomme ich:

mv: cannot move `/path/backup9' to `/path/backup10/backup9': Directory
not empty


Die Verschachtelung an Backups bereitet mir hier Kopfzerbrechen.
 

Lesen sie die antworten

#1 Franz Urbanski
20/09/2011 - 14:08 | Warnen spam
Stefan Enzinger schrieb:
Für ein Backupskript (Bash) möchte ich Ordner umbenennen (deren Nummer
erhöhen)
days_to_keep
echo "renaming backups..."
for (( i=days_to_keep; i>0; i--))
do
mv -f "${backup_base}/backup$((i-1))" "${backup_base}/backup$((i))"
done

mv -f "$incoming_backup" "${backup_base}/backup0"

Das geht soweit gut, nur manchmal bekomme ich:



Das müßte eigentlich nach dem zweiten Durchlauf immer so sein:

mv: cannot move `/path/backup9' to `/path/backup10/backup9': Directory
not empty



Erklàrung:

"mv source target" macht ein "rename", wenn target noch nicht existiert.
Also beim ersten Durchlauf.
Ist target ein Directory, wird source nach target/source verschoben,
wenn target/source noch nicht existiert.
Also beim zweiten Durchlauf.
Ab dem dritten Durchlauf gibt es Probleme, wenn target/source nicht
leer ist oder einige Files darin nicht beschreibbar.


Abhilfe:

rm -rf ${backup_base}/backup$((days_to_keep))
vor der Schleife aufrufen.


Die Verschachtelung an Backups bereitet mir hier Kopfzerbrechen.




Gruß

Franz

Ähnliche fragen