stringtranslate.com

mv (Unix)

mves un comando de Unix que mueve uno o más archivos o directorios de un lugar a otro. Si ambos nombres de archivos están en el mismo sistema de archivos, esto resulta en un simple cambio de nombre de archivo; de lo contrario, el contenido del archivo se copia a la nueva ubicación y el archivo antiguo se elimina. El uso mvrequiere que el usuario tenga permiso de escritura para los directorios entre los que se moverá el archivo. Esto se debe a que mvcambia el contenido de ambos directorios ( es decir , el de origen y el de destino) involucrados en el movimiento. Cuando se utiliza el mvcomando 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 vinculados . El comportamiento se selecciona a partir del nombre de la ruta argv[0]. 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 prevista.

Historia

Un movecomando que mueve una entrada de directorio a un nuevo directorio se implementó por primera vez en Multics . Se puede contratar a mv. [1] Más tarde, el mvcomando apareció en la versión 1 de Unix [2] y pasó a formar parte de la edición 2 de X/Open Portability Guide de 1987. [3] La versión mvincluida 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 nativos Win32 de utilidades comunes similares a GNU Unix. [5] El comando mv también ha sido portado al sistema operativo IBM i . [6]

Archivo existente en conflicto

Cuando un nombre de archivo se mueve a un nombre de archivo existente, el archivo existente se elimina ( golpea ) de forma predeterminada. Si el archivo existente no se puede escribir pero está en un directorio que sí se puede escribir, el comando mv solicita confirmación (si se ejecuta desde una terminal) antes de continuar, a menos que se use la opción -f (forzar).

Se puede evitar la sobrescritura accidental utilizando el indicador GNU -n(formato largo --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) cambia el nombre de los archivos de destino para eliminarlos.

Una ambigüedad relacionada surge cuando un nombre de archivo se mueve a un directorio existente. De forma predeterminada, mvesto se manejaría como si se intentara mover un nombre dentro de este directorio. GNU mv tiene un -Tinterruptor para deshabilitar esta suposición y, en su lugar, intenta sobrescribir el directorio. Una inversa -thace explícita la operación de mover al directorio. [4]

Mover versus copiar y eliminar

Mover archivos dentro del mismo sistema de archivos generalmente se implementa de manera diferente a copiar el archivo y luego eliminar el original. En plataformas que no admiten el cambio de nombre de syscall, se agrega un nuevo enlace al nuevo directorio y se elimina el original. No se accede a los datos del fichero. Todos los sistemas compatibles con POSIX implementan la llamada de cambio de nombre .

Un movimiento real (efectivamente, un cambio de nombre) es dramáticamente más rápido que el tortuoso procedimiento de copiar y mover. El número i del archivo (abreviatura de " número de inodo ") no cambia. No se requiere ningún permiso para leer el archivo que se está moviendo en la medida en que, conceptualmente hablando, lo que se cambia como resultado del "movimiento" es sólo información de catalogación . Dado que los directorios de origen y de destino se están modificando, es decir, las entradas se crean dentro del directorio de destino y se borran del directorio de origen, se requiere permiso de "escritura" en ambos directorios para completar el movimiento. Mover archivos de un sistema de archivos a otro puede fallar por completo o puede realizarse automáticamente como una acción atómica de copiar y eliminar; los detalles reales dependen de la implementación.

Mover un directorio de un padre a otro directorio padre diferente requiere permiso de escritura en el directorio que se está moviendo, además de permisos para modificar los padres nuevos y antiguos. Esto se debe a que el número i de la entrada del directorio ".." (que puede usarse en cualquier contexto como alias para el directorio principal del directorio actual) cambia como resultado del cambio de nombre.

Opciones

La mayoría de las versiones de mv admiten:

Estas opciones son parte de X/Open Portability Pautas, más tarde la base de POSIX y SUS . Todas las implementaciones de mv compatibles con POSIX deben admitirlos. [7]

Ejemplos

Tenga en cuenta que, en el ejemplo anterior, /mnt se refiere al directorio (el "punto de montaje") sobre el que está montado un sistema de archivos determinado. Nombrar estos directorios /mnt es una convención popular, pero de ninguna manera es necesario. Un "sistema de archivos" puede considerarse como un árbol independiente que lógicamente se considera una unidad; su raíz está "montada" encima de un directorio elegido por el administrador. Cualquier contenido anterior de ese directorio es invisible, pero se "restaura" cuando se desmonta el nuevo volumen.

Ver también

Referencias

  1. ^ Comandos múltiples
  2. ^ mv(1)  –  Manual de comandos generales de FreeBSD
  3. ^ mv : mover archivos: referencia de shell y utilidades, la especificación única de UNIX , versión 4 de The Open Group
  4. ^ ab mv(1) -  Manual de comandos generales de Linux
  5. ^ "Puertos nativos Win32 de algunas utilidades GNU". unxutils.sourceforge.net .
  6. ^ IBM . "Qshell de programación de IBM System i versión 7.2" (PDF) . IBM . Consultado el 5 de septiembre de 2020 .
  7. ^ Especificación única de Unix n.° 1980: motivación

enlaces externos