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
de /source
y crea uno nuevo en /target
. Eso se hace mediante una llamada al sistema atómico (es decir, ininterrumpible). El inodo que contiene las entradas del directorio de dir
así como 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 en el nuevo sistema de archivos y luego se desvinculan del original. Entonces, si interrumpes mv
mientras se está copiando, puede terminar con dos copias de algunos de los archivos:en la ubicación anterior y en la nueva.
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 elimina recursivamente la fuente. Entonces
mv a b c/
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 se aplica solo a la implementación de GNU.
Para aclarar: si un es un directorio que contiene d y e y b es un archivo, el orden será
- crear c/a
- copiar a/d -> c/a/d
- copiar a/e -> c/a/e
- eliminar a/d
- eliminar un/e
- eliminar un
- copiar b -> c/b
- eliminar b
Mueve un directorio, interrumpe el movimiento y el directorio original permanecerá intacto:
$ mv a b/
Si mueve varios directorios, cada uno permanecerá intacto en el origen o en el destino, dependiendo de cuándo interrumpió:
$ mv a b c/
Cómo obtuve mi respuesta:
$ mv --version
mv (GNU coreutils) 8.21
$ info mv
... It first uses some of the same code that's used by `cp -a'
to copy the requested directories and files, then (assuming the copy
succeeded) it removes the originals. If the copy fails, then the part
that was copied to the destination partition is removed. If you were
to copy three directories from one partition to another and the copy of
the first directory succeeded, but the second didn't, the first would
be left on the destination partition and the second and third would be
left on the original partition.
Como prueba, copié una carpeta grande en un directorio NFS, la interrumpí y la cantidad de archivos en mi carpeta grande de origen permaneció igual, y los contenidos parciales quedaron en el directorio NFS. Usé "find . -type f | wc -l" para verificar.
Parece que la respuesta de Simon es correcta.