Sto usando CentOS 5.5 e vorrei spostare una grande quantità di cartelle all'interno di un volume , mantenendo il loro mtime
.
La migliore soluzione che ho potuto trovare è questa:
cp -p -r source/data target/
rm -rf source/data
Con oltre 1 TB di dati su una condivisione NFS, la copia richiede un'eternità. Non voglio copiare. Voglio una mossa istantanea.
Quando sposto una cartella usando mv source/data target/
, la mtime
cartella (non i file) viene impostata sull'ora corrente. Questo perché il contenuto della cartella che sto spostando viene modificato da questa operazione (la ..
voce punta a un altro inode).
Mi è venuta in mente una seguente shell script che ho chiamato mv_preserve_mtime.sh
:
#!/bin/bash
# Moves source folder to target folder.
# You are responsible for making sure the target does not exist, otherwise this blows up
export timestamp=`stat -c %y $1`
mv "$1" "$2"
touch --date="${timestamp}" $2
Bene, neanche quello ha funzionato. La cartella mtime
viene ripristinata, ma tutte le cartelle all'interno della cartella che sposto (solo quelle a 1 livello di profondità) ottengono il loro mtime
ripristino per motivi che non capisco.
Qualcuno ha una soluzione adeguata, efficiente e corretta?
mv
passaggio che causa problemi. Il server NFS è in realtà un archivio NetApp, non so praticamente nulla dei suoi interni.
touch
avrebbe dovuto funzionare. A proposito sarebbe un modo più portatile touch -r "$1" reference.tmp; mv -- "$1" "$2"; touch -r reference.tmp -- "$2"; rm reference.tmp
.
stat
non era portatile.
touch
non ha funzionato. È ilmv
passaggio o iltouch
passaggio che modifica il mtime delle sottodirectory? Quale sistema operativo si trova sul server NFS e (se si conosce) quale tipo di file system?