Linux / Comando mv: mover y renombrar archivos sin sobrescribir por error

mv es un comando para mover o renombrar archivos y directorios a otra ubicación. En el mismo sistema de archivos, normalmente se maneja como un cambio de nombre rápido de la entrada del directorio, pero al mover a otro sistema de archivos, funciona de manera similar a copiar y luego eliminar el original.

En este artículo se explican la sintaxis básica, cómo mover varios elementos, el control de sobrescritura, las opciones para reducir la ambigüedad en la ruta de destino y precauciones al mover grandes cantidades de datos.

¿Qué es el comando mv?

mv mueve la ruta de origen a la ruta de destino. Si se especifican dos argumentos y el destino es un directorio existente, se moverá dentro de él; de lo contrario, se renombrará con el nombre del destino. Si se cruzan los límites del sistema de archivos, GNU mv puede manejarlo copiando primero y luego eliminando el original, lo que prolonga el tiempo de operación y puede dar lugar a éxitos parciales.

Sintaxis básica

mv [OPCIONES] ORIGEN DESTINO
mv [OPCIONES] ORIGEN... DIRECTORIO
mv [OPCIONES] -t DIRECTORIO ORIGEN...

Si un nombre contiene espacios, escríbalo entre comillas; use -- antes de los operandos que puedan empezar por un guion. Los ejemplos son independientes: cree archivos de prueba y los directorios de destino antes de ejecutarlos, sin reutilizar archivos importantes. Consulte mv --help y man mv en su sistema para comprobar las opciones disponibles.

Uso básico de mv

Renombrar archivos

Se especifica un nuevo nombre dentro del mismo directorio.

mv draft.txt final.txt

Mover archivos a otro directorio

Si el destino es un directorio existente, se mueve dentro manteniendo el nombre original.

mv report.pdf archive/

Mover varios archivos a la vez

Si hay varios orígenes, el último argumento debe ser un directorio de destino.

mv *.log old-logs/
mv -t old-logs app.log access.log error.log

Verificar el resultado del movimiento o cambio de nombre

mv normalmente no produce salida si tiene éxito. Después de cambiar el nombre, puede verificar si la ruta original desapareció y se creó la nueva ruta.

printf 'demo\n' > before.txt
mv before.txt after.txt
test -f after.txt && test ! -e before.txt
echo $?

La salida de ejemplo 0 significa que ambas condiciones son verdaderas. Al mover a otro sistema de archivos, puede ocurrir internamente una copia y eliminación, por lo que para trabajos de gran volumen, verifique también el tamaño y contenido de los archivos resultantes.

Opciones principales

Opciones Descripción
-i Verificar antes de sobrescribir un destino existente.
-n, --no-clobber No sobrescribir un destino existente.
-f, --force Intenta sobrescribir sin confirmación.
-u, --update Se mueve según las condiciones, como si no hay destino o si el original es más reciente.
-v Imprime la ruta que se está procesando.
-b, --backup Crea una copia de seguridad del archivo de destino que se va a sobrescribir.
-T, --no-target-directory Trata el destino como una ruta exacta, no como un directorio.
-t DIR Especifica el directorio de destino como una opción.

Las opciones largas facilitan entender su significado y también ayudan a revisar scripts. Sin embargo, en scripts donde la portabilidad es importante, primero verifique si el sistema objetivo soporta esas opciones de extensión GNU.

Ejemplos de uso práctico

Confirmar o hacer una copia de seguridad antes de sobrescribir.

En operaciones manuales, -i solicita confirmación; -n evita reemplazar un destino existente. No interprete por sí solo un estado de salida cero como prueba de que todos los archivos se movieron: algunas versiones omiten destinos con -n sin indicar un error. En GNU mv que admita --update=none-fail, esa opción permite tratar una omisión como fallo. Compruebe las rutas finales y use -b si necesita conservar una copia del destino que vaya a reemplazar. Los ejemplos siguientes modifican archivos de configuración y requieren rutas y permisos adecuados; practique primero con copias temporales.

mv -iv new.conf /etc/myapp/config.conf
mv -bv new.conf /etc/myapp/config.conf

Especificar claramente la ruta de destino

Si accidentalmente existe un directorio con el mismo nombre que el destino, puede moverse a una ubicación no deseada. Cambiar a una ruta de destino exacta con -T ayuda a reducir la ambigüedad.

mv -T staging current
mv -t archive -- file1 file2

Verificar movimientos entre sistemas de archivos

Mover archivos grandes a otro punto de montaje puede implicar la copia real de datos y la eliminación del original, en lugar de un simple cambio de nombre instantáneo. Verifique el espacio disponible y la posibilidad de interrupción, y considere un procedimiento para limpiar el original después de verificar los datos importantes.

df -h source-dir destination-dir
mv -v large-image.raw /mnt/archive/

Comparación con comandos relacionados con mv

Comando / método Rol principal Situaciones adecuadas
mv Mover o renombrar Cuando se elimina la ruta de origen y se mueve a la ruta de destino
cp Crear una copia independiente Cuando se mantienen tanto el original como la copia
rename Renombrar varios archivos según reglas Verificar la sintaxis de la herramienta de distribución y cambiar en lote
rsync --remove-source-files Transferir archivos y retirar los archivos de origen que se hayan transferido correctamente Control detallado de movimientos a gran escala o remotos

Precauciones al usar

Mover no significa enviar a la papelera

Si ocurre una sobrescritura incorrecta, no se puede restaurar fácilmente el archivo de destino anterior. En rutas importantes, use -i, -n o una copia de seguridad.

El movimiento entre sistemas de archivos puede tener éxito parcialmente

Si al mover varios elementos se produce falta de espacio o error de permisos, algunos pueden estar en el destino y otros permanecer en el origen. Debe verificar el resultado por elemento.

Evite la barra al final de enlaces simbólicos de directorio

Si el origen puede ser un enlace simbólico que apunta a un directorio, agregar una barra al final puede causar un comportamiento inesperado según el sistema. Para mover el enlace en sí, especifique claramente la ruta.

FAQ

¿Mv vuelve a copiar los datos en el mismo sistema de archivos?

Generalmente, en el mismo sistema de archivos se maneja como un cambio de nombre y es rápido. Al mover a otro sistema de archivos, puede hacerse mediante copia y luego eliminación del original.

¿Cómo evitar sobrescribir un archivo existente en el destino?

Use mv -n ORIGEN DESTINO. Si necesita confirmación interactiva, use -i.

¿Es diferente la sintaxis para renombrar y mover archivos?

Ambos están en el formato mv ORIGEN DESTINO. El resultado varía según si el destino es un directorio existente o una nueva ruta.

¿Cómo mover varios archivos de manera segura a un solo directorio?

Al especificar el directorio de destino como mv -t DIRECTORIO -- ARCHIVO..., la configuración de los argumentos se vuelve clara.

Para identificar otras herramientas de archivos, consulte la Lista de comandos de uso frecuente en Linux. Las opciones y sus diferencias entre versiones se describen en la Documentación oficial de mv de GNU Coreutils y en el Manual oficial de GNU Coreutils.