Al igual que cp para copiar y rm para eliminar, Linux también ofrece un comando integrado para mover y renombrar archivos. Se llama mv . En este artículo, discutiremos los conceptos básicos de esta herramienta de línea de comandos usando ejemplos fáciles de entender. Tenga en cuenta que todos los ejemplos utilizados en este tutorial se han probado en Ubuntu 20.04 LTS.
comando mv de Linux
Como ya se mencionó, el comando mv en Linux se usa para mover o renombrar archivos. La siguiente es la sintaxis del comando:
mv [OPTION]... [-T] SOURCE DEST
mv [OPTION]... SOURCE... DIRECTORY
mv [OPTION]... -t DIRECTORY SOURCE...
Y esto es lo que dice la página del manual al respecto:
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.
Los siguientes ejemplos con estilo de preguntas y respuestas le darán una mejor idea de cómo funciona esta herramienta.
P1. ¿Cómo usar el comando mv en Linux?
Si solo desea cambiar el nombre de un archivo, puede usar el comando mv de la siguiente manera:
mv [filename] [new_filename]
Por ejemplo:
mv names.txt fullnames.txt
Del mismo modo, si el requisito es mover un archivo a una nueva ubicación, use el comando mv de la siguiente manera:
mv [nombre de archivo] [dirección de destino]
Por ejemplo:
mv fullnames.txt /home/himanshu/Downloads
P2. ¿Cómo asegurarse de que mv indique antes de sobrescribir?
De forma predeterminada, el comando mv no aparece cuando la operación implica sobrescribir un archivo existente. Por ejemplo, la siguiente captura de pantalla muestra que el archivo full_names.txt existente fue sobrescrito por mv sin ninguna advertencia o notificación.
Sin embargo, si lo desea, puede obligar a mv a que le solicite mediante -i opción de línea de comandos.
mv -i [nombre_de_archivo] [nombre_de_archivo_nuevo]
Entonces, las capturas de pantalla anteriores muestran claramente que -i lleva a mv a pedir permiso al usuario antes de sobrescribir un archivo existente. Tenga en cuenta que, en caso de que desee especificar explícitamente que no desea que mv se le solicite antes de sobrescribir, utilice -f opción de línea de comandos.
P3. ¿Cómo hacer que mv no sobrescriba un archivo existente?
Para ello, debe utilizar -n opción de línea de comando.
mv -n [filename] [new_filename]
La siguiente captura de pantalla muestra que la operación mv no tuvo éxito porque ya existía un archivo con el nombre 'full_names.txt' y el comando tenía la opción -n.
Nota:
If you specify more than one of -i, -f, -n, only the final one takes effect.
P4. ¿Cómo hacer que mv elimine las barras inclinadas finales (si las hay) del argumento fuente?
Para eliminar las barras diagonales finales de los argumentos de origen, utilice --strip-trailing-slashes opción de línea de comandos como se muestra a continuación.
mv --strip-trailing-slashes [source] [dest]
Así es como la documentación oficial explica la utilidad de esta opción:
This is useful when a source argument may have a trailing slash and specify a symbolic link to a directory. This scenario is in fact rather common because some shells can automatically append a trailing slash when performing file name completion on such symbolic links. Without this option, mv
, for example, (via the system’s rename function) must interpret a trailing slash as a request to dereference the symbolic link and so must rename the indirectly referenced directory and not the symbolic link. Although it may seem surprising that such behavior be the default, it is required by POSIX and is consistent with other parts of that standard.
P5. ¿Cómo hacer que mv trate el destino como un archivo normal?
Para asegurarse de que la entidad de destino se trate como un archivo normal (y no como un directorio), use -T opción de línea de comandos.
mv -T [source] [dest]
He aquí por qué existe esta opción de línea de comandos:
This can help avoid race conditions in programs that operate in a shared area. For example, when the command ‘mv /tmp/source /tmp/dest’ succeeds, there is no guarantee that /tmp/source was renamed to /tmp/dest: it could have been renamed to/tmp/dest/source instead, if some other process created /tmp/dest as a directory. However, if mv -T /tmp/source /tmp/dest succeeds, there is no question that/tmp/source was renamed to /tmp/dest.
In the opposite situation, where you want the last operand to be treated as a directory and want a diagnostic otherwise, you can use the --target-directory (-t) option.
P6. ¿Cómo hacer que mv mueva el archivo solo cuando es más nuevo que el archivo de destino?
Suponga que existe un archivo llamado fullnames.txt en el directorio de Descargas de su sistema, y hay un archivo con el mismo nombre en su directorio de inicio. Ahora, desea actualizar ~/Downloads/fullnames.txt con ~/fullnames.txt, pero solo cuando este último sea más nuevo. Entonces, en este caso, tendrás que usar la -u opción de línea de comandos.
mv -u ~/fullnames.txt ~/Downloads/fullnames.txt
Esta opción es particularmente útil en los casos cuando necesita tomar tales decisiones desde dentro de un script de shell.
P7. ¿Cómo hacer que mv emita detalles de todo lo que está haciendo?
Si desea que mv genere información que explique qué está haciendo exactamente, utilice -v opción de línea de comandos.
mv -v [filename] [new_filename]
Por ejemplo, las siguientes capturas de pantalla muestran mv emitiendo algunos detalles útiles de lo que hizo exactamente.
P8. ¿Cómo forzar a mv a crear una copia de seguridad de los archivos de destino existentes?
Esto lo puedes hacer usando -b opción de línea de comandos. El archivo de respaldo creado de esta manera tendrá el mismo nombre que el archivo de destino, pero con una tilde (~) añadida. He aquí un ejemplo:
Conclusión
Como ya habrá adivinado, mv es tan importante como cp y rm por la funcionalidad que ofrece:después de todo, renombrar/mover archivos también es una de las operaciones básicas. Hemos discutido la mayoría de las opciones de línea de comandos que ofrece esta herramienta. Entonces puedes practicarlos y comenzar a usar el comando. Para saber más sobre mv, diríjase a su página man.