Cómo usar el comando mv de Linux

Cómo usar el comando mv de Linux

En sistemas operativos Linux, el comando mv mueve y renombra archivos y directorios.

Sintaxis

Renombrar un archivo con el nombre de origen a destino:

mv[opciones][-T] destino fuente

Mover los archivos de origen a un directorio llamado destino:

mv[opciones] fuente[fuente2 ....] destino

Igual que la sintaxis anterior, pero especificando el directorio en primer lugar y el archivo o archivos de origen en último lugar:

mv[opciones] -t fuente de destino[fuente2 ....]

Opciones

--backup[=vcm]hacer una copia de seguridad de cada archivo de destino existente, utilizando el método de control de versiones vcm. Si se omite vcm, --backup se comporta igual que -b (las copias de seguridad se crean utilizando el método de control de versiones predeterminado).
-bComo --backup, pero no acepta un método de respaldo. En su lugar, se utiliza el método especificado por la variable de entorno VERSION_CONTROL. Se crean copias de seguridad simples si la variable no está configurada.
-f, --forceSobrescriba siempre los archivos existentes sin que se le pida que lo haga. Esto puede ser útil si necesita sobrescribir varios archivos cuyos permisos son de sólo lectura; si no especifica -f, se le preguntará por cada archivo.
-i, --interactivePregunte antes de sobrescribir un archivo existente, independientemente de los permisos del archivo.
-n, --no-clobberNunca sobrescriba un archivo existente.
Nota: Si especifica más de una de las opciones anteriores -i, -f o -n, sólo tendrá efecto la última opción que especifique.
--strip-trailing-slashesEliminar cualquier barra oblicua de cada argumento fuente.
-S, --suffix=suffixespecifique el sufijo del nombre de archivo que se utilizará para todos los archivos de copia de seguridad. El valor por defecto es "~".
-t, --target-directory=destinationMover todas las fuentes al destino del directorio.
-T, --no-target-directoryTrate el destino como un archivo normal, no como un directorio.
-u, --updateNo sobrescriba los archivos si son más nuevos. Sólo se realizará una mudanza si el archivo de destino es más antiguo que el archivo de origen, o si el archivo de destino no existe ya.
-v, --verboseProporcione una salida verbosa. Imprimir el nombre de cada archivo movido.
--helpMuestre un mensaje de ayuda y salga.
--versionVisualizar información de versión y salir.

Copia de seguridad de archivos

Si utiliza las opciones -b o --backup, mv renombrará el archivo de destino si existe, añadiendo un sufijo a su nombre de archivo. Esto guarda una copia del archivo original en lugar de sobrescribirlo.

Existen dos tipos de copias de seguridad: simples y numeradas.

  • Las copias de seguridad simples eliminan un archivo de copia de seguridad existente si ya existe. Sólo se mantiene un archivo de respaldo. El sufijo por defecto para copias de seguridad "simples" es una tilde ("~"). Puede cambiar este sufijo con la opción --suffix, o configurando la variable de entorno SIMPLE_BACKUP_SUFFIX. Por ejemplo, el archivo.txt sería respaldado como archivo.txt~.
  • Las copias de seguridad numeradas mantienen los archivos de copia de seguridad existentes, creando copias de seguridad adicionales con un número incremental en el nombre del archivo. No se elimina ningún archivo de copia de seguridad. El sufijo para copias de seguridad numeradas es ".~n~", donde n es un número entero. Por ejemplo, el archivo.txt sería respaldado como archivo.txt.~1~, luego archivo.txt.~2~, etc.

Métodos de control de versiones

Existen reglas adicionales para crear archivos de copia de seguridad, llamadas métodos de control de versiones. El método de control de versiones se puede especificar con la opción --backup, o configurando la variable de entorno VERSION_CONTROL. Los métodos son:

Nombre del métodoDescription
none, offNunca haga copias de seguridad, incluso si la opción --backup está activada.
numbered, tHaga copias de seguridad numeradas.
existing, nilnumerados si ya existen copias de seguridad numeradas, de otra manera simple.
simple, neverSiempre haga copias de seguridad simples.

Ejemplos

mv miArchivo.txt misArchivos

Mueva el archivo miArchivo.txt al directorio misArchivos. Si misArchivos es un archivo, se sobrescribirá. Si el archivo está marcado como de sólo lectura, pero usted es el propietario del archivo, se le pedirá que lo sobrescriba.

mv misArchivos misArchivos2

Si misArchivos es un archivo o directorio, y misArchivos2 es un directorio, mueva misArchivos a misArchivos2. Si misArchivos2 no existe, el archivo o directorio misArchivos se renombra como misArchivos2.

mv miArchivo.txt ../

Mueva el archivo miArchivo.txt al directorio principal del directorio actual.

mv -t misArchivos miArchivo1 miArchivo2

Mueva los archivos miArchivo1 y miArchivo2 al directorio misArchivos.

mv miArchivo1 miArchivo2 misArchivos

Igual que el comando anterior.

mv -n archivo archivo2

Si archivo2 existe y es un directorio, el archivo se mueve a él. Si el archivo2 no existe, el archivo se renombra como archivo2. Si archivo2 existe y es un archivo, no pasa nada.

mv -f archivo archivo2

Si archivo2 existe y es un archivo, se sobrescribirá.

mv -i archivo archivo2

Si archivo2 existe y es un archivo, se muestra un mensaje:

mv: overwrite 'file2'?

Al introducir "y", "yes", "yes", "Yes", o "Y" se sobrescribirá el archivo. Cualquier otra entrada omitirá el archivo.

mv -fi archivo archivo2

Igual que el mv -i. Pregunte antes de sobrescribir. La opción f se ignora.

mv -if archivo archivo2

Igual que mv -f. Sobrescribir sin indicación. La opción i se ignora.

mv My\ archivo.txt My\ archivo\ 2.txt

Cambie el nombre del archivo "Mi Archivo.txt" a "Mi Archivo 2.txt". Aquí, los espacios en el nombre del archivo se escapan, protegiéndolos de ser interpretados como parte del comando.

mv "Mi Archivo.txt" "My file 2.txt"

Igual que el comando anterior.

mv "Mi Archivo.txt" misArchivos

El resultado de este comando:

  • Si misArchivos es un directorio, Mi Archivo.txt se mueve a misArchivos.
  • Si misArchivos es un archivo, Mi Archivo.tx se renombra como misArchivos, y los misArchivos originales se sobrescriben.
  • Si misArchivos no existe, Mi archivo.txt se renombra como misArchivos.
mv My*.txt misArchivos

Aquí, * es un comodín que significa "cualquier número, incluyendo cero, de cualquier carácter".

  • Si misArchivos es un directorio: todos los archivos con la extensión.txt, cuyo nombre comienza por My, se moverán a misArchivos.
  • Si misArchivos no existe o no es un directorio, mv informa de un error y no hace nada.
my My\ file??.txt misArchivos

Aquí, ? es un comodín que significa "cero o uno de cualquier carácter". Se utiliza dos veces, por lo que puede tener un máximo de dos caracteres.

  • Si misArchivos es un directorio: cualquier archivo con cero, uno o dos caracteres entre Mi archivo y.txt en su nombre se mueve a misArchivos.
  • Si misArchivos no existe, o no es un directorio, mv informa de un error y no hace nada.

Realización de copias de seguridad

mv -b archivo archivo2

Si existe el archivo2, se le cambiará el nombre a archivo2~.

mv -b --suffix=.bak archivo archivo2

Si existe archivo2, se le cambiará el nombre a archivo2.bak.

mv --backup=numbered; mv archivo archivo2

Si existe el archivo 2, se le cambiará el nombre a archivo 2.~1~. Si existe el archivo 2.~1~, se le cambiará el nombre a archivo 2.~2~, etc.

VERSION_CONTROL=numbered mv -b archivo archivo2

Igual que el comando anterior. La variable de entorno se define sólo para este comando.

export VERSION_CONTROL=numbered; archivo mv -b archivo2

Al exportar la variable de entorno VERSION_CONTROL, todos los comandos mv -b de la sesión actual utilizarán copias de seguridad numeradas.

export VERSION_CONTROL=numbered; mv archivo archivo2

Aunque la variable VERSION_CONTROL está activada, no se crean copias de seguridad porque no se especificó -b (o --backup). Si existe el archivo2, se sobrescribe.

Renombrar archivos usando expresiones regulares

mv no interpreta expresiones regulares (regex).

Si necesita renombrar muchos archivos, utilizando una asignación compleja o matizada de nombres de archivos antiguos a nuevos, debería utilizar el comando renombrar en su lugar.

rename acepta expresiones regulares perl. Por ejemplo:

rename 's/My\ archivo(..)/document$1/' My*

Este comando cambiará el nombre de los archivos Mi archivo.txt y Mi archivo 2.txt a documento.txt y documento 2.txt.