mv
es un comando de Unix que mueve uno o más archivos o directorios de un lugar a otro. Si ambos nombres de archivo están en el mismo sistema de archivos, esto da como resultado un simple cambio de nombre de archivo; de lo contrario, el contenido del archivo se copia a la nueva ubicación y el archivo anterior se elimina. El uso mv
requiere que el usuario tenga permiso de escritura para los directorios entre los que se moverá el archivo. Esto se debe a que mv
cambia el contenido de ambos directorios ( es decir , el de origen y el de destino) involucrados en el movimiento. Cuando se usa el mv
comando en archivos ubicados en el mismo sistema de archivos, la marca de tiempo del archivo no se actualiza.
En las implementaciones de UNIX derivadas de AT&T UNIX , cp , ln y mv se implementan como un único programa con binarios enlazados de forma rígidaargv[0]
. El comportamiento se selecciona a partir del nombre de la ruta . Esta es una técnica común mediante la cual comandos estrechamente relacionados que se han empaquetado como una unidad permiten al usuario especificar el curso particular de la acción deseada.
Un move
comando que mueve una entrada de directorio a un nuevo directorio fue implementado por primera vez dentro de Multics . Puede contraerse a mv
. [1] Más tarde, el mv
comando apareció en la Versión 1 de Unix [2] y se convirtió en parte de la Guía de Portabilidad X/Open número 2 de 1987. [3]
La versión de mv
incluida en GNU coreutils fue escrita por Mike Parker, David MacKenzie y Jim Meyering. [4] El comando está disponible como un paquete separado para Microsoft Windows como parte de la colección UnxUtils de puertos Win32 nativos de utilidades comunes de GNU similares a Unix. [5] El comando mv también ha sido portado al sistema operativo IBM i . [6]
Cuando se mueve un nombre de archivo a un nombre de archivo existente, el archivo existente se elimina ( se elimina ) de forma predeterminada. Si el archivo existente no es escribible pero se encuentra en un directorio en el que sí lo es, el comando mv solicita confirmación (si se ejecuta desde una terminal) antes de continuar, a menos que se utilice la opción -f (forzar).
Se puede evitar la sobrescritura accidental utilizando el indicador GNU -n
(long format: --no-clobber
). Alternativamente, -u
( --update
) solo sobrescribe los archivos de destino que son más antiguos que los archivos de origen, -i
( --interactive
) solicita confirmación ante cada conflicto de nombres y -b
( --backup
) renombra los archivos de destino sin que interfieran.
Una ambigüedad relacionada surge cuando se mueve un nombre de archivo a un directorio existente. De manera predeterminada, mv
se trataría esto como si se intentara mover un nombre dentro de este directorio. GNU mv tiene un -T
interruptor para desactivar esta suposición e intentar sobrescribir el directorio en su lugar. Una operación inversa -t
hace explícita la operación de mover a directorio. [4]
El traslado de archivos dentro del mismo sistema de archivos generalmente se implementa de manera diferente a la copia del archivo y luego la eliminación del original. En las plataformas que no admiten la llamada al sistema de cambio de nombre , se agrega un nuevo vínculo al nuevo directorio y se elimina el original. No se accede a los datos del archivo. Todos los sistemas compatibles con POSIX implementan la llamada de cambio de nombre .
Un movimiento real (en realidad, un cambio de nombre) es mucho más rápido que el procedimiento indirecto de copiar y mover. El número i del archivo (abreviatura de " número de inodo ") no cambia. No se requiere permiso para leer el archivo que se está moviendo, ya que, conceptualmente hablando, solo se está modificando la información de catalogación como resultado del "movimiento". Dado que se están modificando los directorios de origen y destino, es decir, se están creando entradas dentro del directorio de destino y se están borrando desde dentro del directorio de origen, se requiere permiso de "escritura" en ambos directorios para completar el movimiento. El movimiento de archivos de un sistema de archivos a otro puede fallar por completo o puede realizarse automáticamente como una acción atómica de copia y eliminación; los detalles reales dependen de la implementación.
Para mover un directorio de un directorio principal a otro directorio principal diferente, se requieren permisos de escritura en el directorio que se va a mover, además de permisos para modificar los directorios principales antiguos y nuevos. Esto se debe a que el número i de la entrada de directorio ".." (que se puede utilizar en cualquier contexto como un alias para el directorio principal del directorio actual) cambia como resultado del cambio de nombre.
La mayoría de las versiones de mv admiten:
-i
Procesar de forma interactiva : escribir un mensaje de error estándar antes de mover un archivo que sobrescribiría un archivo existente. Si la respuesta de la entrada estándar comienza con el carácter 'y' o 'Y', se intenta mover. (Anula la opción -f anterior).-f
forzar la sobrescritura del destino (anula la opción -i anterior).Estas opciones forman parte de las Directrices de portabilidad de X/Open, que más tarde se convirtieron en la base de POSIX y SUS . Todas las implementaciones de mv compatibles con POSIX deben admitirlas. [7]
Tenga en cuenta que, en el ejemplo anterior, /mnt hacía referencia al directorio (el "punto de montaje") sobre el que se monta un determinado sistema de archivos. Nombrar dichos directorios como /mnt es una convención popular, pero no es en absoluto necesario. Un "sistema de archivos" puede considerarse como un árbol independiente que se considera lógicamente como una unidad; su raíz se "monta" sobre un directorio elegido por el administrador. Todo el contenido anterior de ese directorio es invisible, pero se "restaura" cuando se desmonta el nuevo volumen.