Estoy usando CentOS 5.5 y me gustaría mover una gran cantidad de carpetas dentro de un volumen , conservando su mtime.
La mejor solución que pude encontrar es así:
cp -p -r source/data target/
rm -rf source/data
Con más de 1 TB de datos en un recurso compartido NFS, la copia lleva una eternidad. No quiero copiar Quiero un movimiento instantáneo
Cuando muevo una carpeta usando mv source/data target/, la mtimecarpeta (no los archivos) se configura a la hora actual. Esto se debe a que esta operación modifica el contenido de la carpeta que estoy moviendo (la ..entrada apunta a un inodo diferente).
Se me ocurrió un siguiente script de shell que llamé 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
Bueno, eso tampoco funcionó. La carpeta mtimese restaura, pero todas las carpetas dentro de la carpeta que muevo (solo las de 1 nivel de profundidad) se mtimerestablecen por razones que no entiendo.
¿Alguien tiene una solución adecuada, eficiente y correcta?

touchno funcionó. ¿Es elmvpaso o eltouchpaso que cambia el tiempo m de los subdirectorios? ¿Qué sistema operativo está en el servidor NFS y (si lo sabe) qué tipo de sistema de archivos?mvpaso que causa problemas. El servidor NFS es en realidad un almacenamiento de NetApp, no sé prácticamente nada sobre sus componentes internos.touchlo contrario debería haber funcionado. Por cierto, sería una forma más portátiltouch -r "$1" reference.tmp; mv -- "$1" "$2"; touch -r reference.tmp -- "$2"; rm reference.tmp.statno era portátil.Respuestas:
POSIX
mvno proporciona ninguna opción para solicitar la preservación de atime / mtime, pero como la operación es local en un mismo volumen, puede solicitar elcpuso de enlaces duros en lugar de copiar datos de los archivos normales utilizando la-lopción:Dado que solo se copiarán directorios y referencias de archivos, debería ir mucho más rápido:
Para obtener más información sobre enlaces duros, puede consultar la página de Wikipedia correspondiente
En cuanto a por qué los subdirectorios mtime se restablecen con su solución actual, es porque solo obtiene y restaura el directorio primario mtime: touch no es un comando recursivo.
fuente
mvno tiene la opción "recursiva", descender a subdirectorios solo se hace si se necesita una copia real (volúmenes diferentes, por ejemplo).mven un directoriodata, yo simplemente cambio el..en eldatacontenido 's y modificar lassourcey lostargetdirectorios a la lista el elemento movido correctamente. Ningún otro directorio necesitaría ser tocado.renamemedida de la implementación de syscall subyacente por parte del kernel y los sistemas de archivos utilizados, NFS agrega su parte al problema. Hay algunos indicadores que hacen referencia a este tipo de inconsistencias: patchwork.ozlabs.org/patch/25833 bugs.opensolaris.org/bugdatabase/…Otra solución puede ser:
fuente