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). |
-b | Como --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, --force | Sobrescriba 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, --interactive | Pregunte antes de sobrescribir un archivo existente, independientemente de los permisos del archivo. |
-n, --no-clobber | Nunca 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-slashes | Eliminar cualquier barra oblicua de cada argumento fuente. |
-S, --suffix=suffix | especifique 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=destination | Mover todas las fuentes al destino del directorio. |
-T, --no-target-directory | Trate el destino como un archivo normal, no como un directorio. |
-u, --update | No 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, --verbose | Proporcione una salida verbosa. Imprimir el nombre de cada archivo movido. |
--help | Muestre un mensaje de ayuda y salga. |
--version | Visualizar 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étodo | Description |
---|---|
none, off | Nunca haga copias de seguridad, incluso si la opción --backup está activada. |
numbered, t | Haga copias de seguridad numeradas. |
existing, nil | numerados si ya existen copias de seguridad numeradas, de otra manera simple. |
simple, never | Siempre 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:
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.