Como mv uma pasta no Linux mantendo seu mtime?

9

Estou usando o CentOS 5.5 e gostaria de mover uma grande quantidade de pastas dentro de um volume , mantendo seus mtime .

A melhor solução que pude 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 demora uma eternidade. Eu não quero copiar. Eu quero movimento instantâneo.

Quando eu movo uma pasta usando mv source/data target/ , o mtime da pasta (não os arquivos) é definido para a hora atual. Isso ocorre porque o conteúdo da pasta que estou movendo é modificado por essa operação (a entrada .. está apontando para um inode diferente).

Eu criei um script de shell a seguir chamado 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 (somente as que têm 1 nível de profundidade) recebem seu mtime reset por motivos que eu não entendo.

Alguém tem uma solução correta, eficiente e correta?

    
por Roman Zenka 09.12.2010 / 17:19

2 respostas

12

POSIX mv não fornece nenhuma opção para solicitar preservação atime / mtime, mas como a operação é local para um mesmo volume, você pode pedir ao cp para usar hard-links em vez de copiar dados dos arquivos regulares usando a opção -l :

cp -p -r -l source/date target/
rm -rf source/data

Como somente os diretórios e referências de arquivos serão realmente copiados, deve ir muito mais rápido:

Para mais informações sobre hard-links, você pode consultar a página correspondente da Wikipedia

Por que os subdiretórios mtime estão sendo redefinidos com sua solução atual? é porque você só obtém e restaura o mtime do diretório pai: toque não é um comando recursivo.

    
por 09.12.2010 / 17:53
2

Outra solução pode ser:

rsync -a --remove-source-files source/data target/

    
por 06.05.2016 / 10:36