Estou usando o CentOS 5.5 e gostaria de mover uma grande quantidade de pastas em um volume , mantendo-as mtime
.
A melhor solução que eu poderia encontrar é assim:
cp -p -r source/data target/
rm -rf source/data
Com mais de 1 TB de dados em um compartilhamento NFS, a cópia leva uma eternidade. Eu não quero copiar Eu quero movimento instantâneo.
Quando movo uma pasta usando mv source/data target/
, a mtime
pasta (e não os arquivos) é definida para a hora atual. Isso ocorre porque o conteúdo da pasta que estou movendo é modificado por esta operação (a ..
entrada está apontando para um inode diferente).
Eu vim com um seguinte script de shell que chamei 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
Bem, isso também não funcionou. A pasta mtime
é restaurada, mas todas as pastas dentro da pasta que eu movo (apenas as que têm 1 nível de profundidade) são mtime
restauradas por motivos que não compreendo.
Alguém tem uma solução adequada, eficiente e correta?
mv
passo que causa problemas. O servidor NFS é na verdade um armazenamento da NetApp, não sei praticamente nada sobre seus componentes internos.
touch
deveria ter funcionado. A propósito, uma maneira mais portátil seria touch -r "$1" reference.tmp; mv -- "$1" "$2"; touch -r reference.tmp -- "$2"; rm reference.tmp
.
stat
era portátil.
touch
não funcionou. É amv
etapa ou atouch
etapa que altera o mtime dos subdiretórios? Qual sistema operacional está no servidor NFS e (se você souber) que tipo de sistema de arquivos?