En términos generales, me encuentro en pánico cuando me doy cuenta de que si cancelo un movimiento de archivo, podría causar que el destino o la fuente estén incompletos. Esta pregunta se aplica a plataformas basadas en Windows y Unix. Nunca puedo recordar exactamente cómo funciona el comando mover en ninguno de los casos. Por ejemplo, si está moviendo un directorio; ¿copia todo el directorio y luego lo elimina, o copia y luego elimina cada archivo individualmente?
Siempre me doy cuenta, después de escribir algo como mv verybigdir dest
, que tal vez debería haber escrito cp -R verybigdir dest && rm -R verybigdir
(donde el &&
operador pasa al siguiente comando solo si el primero fue exitoso), ¿o no tiene sentido? ¿Qué sucede exactamente cuando presiono Ctrl+ a Cmitad de un movimiento? Del mismo modo, ¿qué sucede exactamente en Windows cuando presiono el botón cancelar?
No puedo contar la cantidad de veces que moví algo (la última vez que lo usé svn
) y tuve dos directorios, con contenido dividido. Supongo que la respuesta es difícil, porque no todas las aplicaciones mueven grupos de archivos de la misma manera.
fuente
Respuestas:
En Windows, moverse a la misma unidad y partición actuará como el comando mv de Unix y cambiará el nombre de la carpeta o cambiará su padre. Sin embargo, si tuviera que moverlo a otro controlador o partición, copiaría y eliminaría archivo por archivo, por lo tanto, es más eficiente usar un archivo tar o un archivo zip sin compresión para mover archivos más rápido a través de particiones y discos duros . Si tuviera que cancelarlo, simplemente se detendría donde está. Creo que lo mismo es cierto para Unix, pero no experimenté lo suficiente para estar 100% seguro. Es solo una cuestión de cambiar el inodo, pero si está en otra partición o unidad, entonces debe copiarse a sectores en esa partición o unidad. Si tuviera que cancelarlo durante la transferencia, ya habría movido algunos archivos, y el archivo que se estaba transfiriendo lo verá '
Actualización: si cancela un movimiento y desea reanudarlo, simplemente vuelva a emitir la orden de movimiento. Puede advertirle que la carpeta de destino ya existe, pero los archivos no se sobrescribirán (a menos que existieran antes del movimiento original o se hayan agregado entre las dos órdenes de movimiento) ya que tan pronto como se transfieren, se eliminan del fuente (si está en una partición o unidad diferente).
fuente
Incluso en una computadora perfectamente estable que nunca falla: si te importan las marcas de tiempo, entonces
mv
es mejor que simplecp
.(
cp -a
conservará las marcas de tiempo para usted, y supongo que existe algo similar en Windows).fuente
No.
Explicación:
cambia el nombre de verybigdir a dest. Esta es una operación atómica, es decir, no puede fallar a la mitad.
Si dest está en otro dispositivo, mv copiará primero y luego eliminará la versión anterior. Esta no es una operación atómica. Si falla, es posible que solo tenga una copia parcial de verybigdir en dest, pero verybigdir aún estará completo.
Sí, otras aplicaciones pueden mover archivos de manera diferente.
fuente
mv verybigdir/* dest
.mv verybigdir/* dest
divide el mv de verybigdir en muchas operaciones de movimiento separadas. Recuerde siempre que, a diferencia de Windows, un programa / herramienta de Linux no puede ver que "*" allí, se expande por el shell.En Windows siempre copio y borro en lugar de mover. Una vez estaba moviendo archivos y aquí es donde noté por primera vez una mala memoria. Al mover el archivo, se detuvo en el medio y recibí un error, así que verifiqué la carpeta de origen y el archivo desapareció, luego verifiqué el destino y había un archivo dañado. Esto sucedió con mayor frecuencia con archivos de mayor tamaño y la mayoría de ellos fueron descargas que tomaron horas, por lo que recomendaría copiar y luego eliminar. Ahorre tiempo al principio, valdrá la pena al final.
fuente
En Unix, en movimientos que no cruzan los límites del sistema de archivos,
mv
no copia los datos: solo actualiza la base de datos de inodo en varios directorios. Esto es mucho más rápido quecp
en archivos grandes.Además, el uso a
mv
través de los límites del sistema de archivos invoca silenciosamente un mecanismo de copia y eliminación.Así que creo que deberías preferirlo
mv
.fuente
En Windows, al menos, mover es simplemente una Copia y Eliminar más automatizada. Creo que mv mueve cada archivo individualmente, lo que significa que ^ c-ing no perderá ningún archivo, simplemente terminará con sus archivos divididos en dos lugares, a diferencia del Explorador de Windows, que eliminará todo cuando se cancele.
Mi solución a esto es: nunca mueva a menos que esté seguro de querer moverlo.
fuente
Si está utilizando ACL en el sistema de archivos de origen, pero no en el destino, mv en Linux copiará el origen y luego, debido a la incapacidad de establecer las ACL en el destino, se detendrá. Entonces terminas teniendo el archivo en ambos lados. No hay ningún interruptor en mv para evitar ese comportamiento, por lo que en este caso es preferible cp && rm.
fuente