J'utilise CentOS 5.5 et je souhaite déplacer une grande quantité de dossiers dans un volume , en conservant leur mtime
.
La meilleure solution que j'ai pu trouver est la suivante:
cp -p -r source/data target/
rm -rf source/data
Avec plus de 1 To de données sur un partage NFS, la copie prend une éternité. Je ne veux pas copier. Je veux un mouvement instantané.
Lorsque je déplace un dossier à l'aide de mv source/data target/
, le mtime
dossier (et non les fichiers) est réglé sur l'heure actuelle. En effet, le contenu du dossier que je déplace est modifié par cette opération (l' ..
entrée pointe vers un autre inode).
J'ai trouvé un script shell suivant que j'ai appelé 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
Eh bien, cela n'a pas fonctionné non plus. Le dossier mtime
est restauré, mais tous les dossiers du dossier que je déplace (seulement ceux de 1 niveau de profondeur) sont mtime
réinitialisés pour des raisons que je ne comprends pas.
Quelqu'un a-t-il une solution appropriée, efficace et correcte?
mv
étape qui cause des ennuis. Le serveur NFS est en fait un stockage NetApp, je ne sais pratiquement rien de ses composants internes.
touch
aurait dû fonctionner. Soit dit en passant, un moyen plus portable serait touch -r "$1" reference.tmp; mv -- "$1" "$2"; touch -r reference.tmp -- "$2"; rm reference.tmp
.
stat
n'était pas portable.
touch
n'a pas fonctionné. Est-ce l'mv
étape ou l'touch
étape qui modifie le mtime des sous-répertoires? Quel système d'exploitation est sur le serveur NFS et (si vous le savez) quel type de système de fichiers?