¿Qué sucede si mv
se interrumpe el comando de Linux ? Digamos, estoy moviendo un directorio completo a otro lugar y lo interrumpo mientras se mueve. ¿El directorio fuente seguirá intacto?
Si mueve un directorio en el mismo sistema de archivos, solo mueve la entrada del directorio de una ubicación en el sistema de archivos a otra. Por ejemplo, mv /source/dir /target/dir
eliminará la entrada de directorio de dir
from /source
y creará una nueva en /target
. Eso se hace mediante una llamada al sistema atómico (es decir, ininterrumpible). El inodo que contiene las entradas del directorio dir
y el contenido real del directorio en sí no se ve afectado.
Si mueve el directorio de un sistema de archivos a otro, todos los archivos se copian primero al nuevo sistema de archivos y luego se desvinculan del original. Entonces, si interrumpe mv
mientras se está copiando, puede terminar con dos copias de algunos de los archivos, en la ubicación anterior y en la nueva.
fsck
(que probablemente se ejecutará automáticamente al reiniciar, ya que el disco no se desmontó limpiamente).strace mv /fs1/dir /fs2/
: lo último que hace mv es invocarunlinkat
todos los archivos de origen a la vez (no uno por uno a medida que se copian).La implementación de GNU itera sobre los argumentos en la línea de comando, intenta cambiar el nombre primero y, si eso falla, copia recursivamente y luego borra recursivamente la fuente. Entonces
eliminará a antes de copiar b , y no comenzará a eliminar nada en a antes de que se complete la copia de destino.
Tenga en cuenta que esto solo se aplica a la implementación de GNU.
Para aclarar: si una es un directorio que contiene D y E , y B es un archivo, el orden será
fuente
mv
, por lo que no es solo GNU.Mueve un directorio, interrumpe el movimiento y el directorio original permanecerá intacto:
Si mueve varios directorios, cada uno estará intacto en el origen o en el destino, dependiendo de cuándo interrumpió:
Cómo obtuve mi respuesta:
Como prueba, copié una carpeta grande en un directorio NFS, la interrumpí y el número de archivos en mi carpeta grande fuente permaneció igual, y el contenido parcial se dejó en el directorio NFS. Usé "find. -Type f | wc -l" para verificar.
Parece que la respuesta de Simon es correcta.
fuente
La respuesta aceptada es definitivamente errónea sobre moverse entre sistemas de archivos, un hecho que ya me ahorró muchos problemas un par de veces. Al mover un directorio que contiene subdirectorios, no se eliminará ningún archivo en un subdirectorio antes de que se haya copiado todo el subdirectorio. Esto es, por cierto, el significado real de "objeto por objeto": un subdirectorio ES un objeto (archivo) y, por lo tanto, su integridad debe ser preservada por una copia completa en el destino antes de que se pueda eliminar algo. Entonces la respuesta de Simon me parece la correcta.
fuente
No. mv opera objeto por objeto, por lo que los objetos que ya han sido procesados se eliminarán de la fuente.
fuente
Definitivamente no. El movimiento se realiza objeto por objeto. Por lo tanto, el objeto movido al destino hasta el punto de interrupción ya no existirá en la fuente.
Si se emitió mv para un archivo grande (entre diferentes) y se ha interrumpido, la fuente estará intacta. En el objetivo verá un archivo incompleto hasta el punto de interrupción.
Sin embargo, puede restaurar el mv con el mismo comando y el proceso continuará.
fuente
Si desea interrumpir mv porque desea desconectarse del terminal, puede enviarlo a un segundo plano:
fuente