Mover archivos en Linux puede parecer relativamente sencillo, pero hay más opciones disponibles de las que la mayoría cree. Este artículo enseña a los principiantes cómo mover archivos en la GUI y en la línea de comandos, pero también explica lo que realmente sucede debajo del capó y aborda las opciones de la línea de comandos que muchos usuarios experimentados rara vez han explorado.
¿Mover qué?
Antes de profundizar en el movimiento de archivos, vale la pena echar un vistazo más de cerca a lo que realmente sucede al mover objetos del sistema de archivos. Cuando se crea un archivo, se asigna a un inode , que es un punto fijo en un sistema de archivos que se utiliza para el almacenamiento de datos. Puede qué inodo se asigna a un archivo con el comando ls:
$ ls --inode example.txt
7344977 example.txt
Cuando mueve un archivo, en realidad no mueve los datos de un inodo a otro, solo asigna al objeto de archivo un nuevo nombre o ruta de archivo. De hecho, un archivo conserva sus permisos cuando se mueve, porque mover un archivo no lo cambia ni lo vuelve a crear.
Los inodos de archivos y directorios nunca implican herencia y son dictados por el propio sistema de archivos. La asignación de inodos es secuencial en función de cuándo se creó el archivo y es completamente independiente de cómo organice su computadora. Un archivo "dentro" de un directorio puede tener un número de inodo más bajo que su directorio principal o uno más alto. Por ejemplo:
$ mkdir foo
$ mv example.txt foo
$ ls --inode
7476865 foo
$ ls --inode foo
7344977 example.txt
Sin embargo, al mover un archivo de un disco duro a otro, es muy probable que el inodo cambie. Esto sucede porque los nuevos datos deben escribirse en un nuevo sistema de archivos. Por esta razón, en Linux el acto de mover y renombrar archivos es literalmente la misma acción. Ya sea que mueva un archivo a otro directorio o al mismo directorio con un nombre nuevo, ambas acciones las realiza el mismo programa subyacente.
Este artículo se centra en mover archivos de un directorio a otro.
Moverse con un mouse
La GUI es una capa de abstracción amigable y, para la mayoría de las personas, familiar sobre una colección compleja de datos binarios. También es la primera y más intuitiva forma de mover archivos en Linux. Si está acostumbrado a la experiencia de escritorio, en un sentido genérico, entonces probablemente ya sepa cómo mover archivos en su disco duro. En el escritorio GNOME, por ejemplo, la acción predeterminada al arrastrar y soltar un archivo de una ventana a otra es mover el archivo en lugar de copiarlo, por lo que probablemente sea una de las acciones más intuitivas del escritorio:
El administrador de archivos Dolphin en el escritorio KDE Plasma por defecto solicita al usuario una acción. Sosteniendo el Shift tecla mientras arrastra un archivo fuerza una acción de movimiento:
Moverse en la línea de comandos
La terminal de Linux
- Los 7 mejores emuladores de terminal para Linux
- 10 herramientas de línea de comandos para el análisis de datos en Linux
- Descargar ahora:hoja de referencia de SSH
- Hoja de trucos de comandos avanzados de Linux
- Tutoriales de línea de comandos de Linux
El comando de shell diseñado para mover archivos en Linux, BSD, Illumos, Solaris y MacOS es mv. . Un comando simple con una sintaxis predecible, mv
No todos mv Sin embargo, los comandos fueron escritos por las mismas personas, por lo que es posible que tenga GNU mv , BSD mv , o Sol mv , dependiendo de su sistema operativo. Las opciones de comando difieren de una implementación a otra (BSD mv no tiene opciones largas), así que consulte su mv página de manual para ver qué es compatible, o instale su versión preferida en su lugar (ese es el lujo del código abierto).
Mover un archivo
Para mover un archivo de una carpeta a otra con mv , recuerda la sintaxis mv
$ touch example.txt
$ mv example.txt ~/Documents
$ ls ~/Documents
example.txt
Al igual que cuando mueve un archivo arrastrándolo y soltándolo en el ícono de una carpeta, este comando no reemplaza a Documentos con ejemplo.txt . En su lugar, mv detecta que Documentos es una carpeta y coloca el example.txt archivo en él.
También puede, convenientemente, cambiar el nombre del archivo a medida que lo mueve:
$ touch example.txt
$ mv example.txt ~/Documents/foo.txt
$ ls ~/Documents
foo.txt
Eso es importante porque le permite cambiar el nombre de un archivo incluso cuando no desea moverlo a otra ubicación, así:
$ touch example.txt
$ mv example.txt foo2.txt
$ ls
foo2.txt
Mover un directorio
El mv El comando no diferencia un archivo de un directorio de la forma en que cp hace. Puede mover un directorio o un archivo con la misma sintaxis:
$ touch file.txt
$ mkdir foo_directory
$ mv file.txt foo_directory
$ mv foo_directory ~/Documents
Mover un archivo de forma segura
Si copia un archivo a un directorio donde ya existe un archivo con el mismo nombre, el mv El comando reemplaza el archivo de destino con el que está moviendo, de forma predeterminada. Este comportamiento se llama golpeteo , y a veces es exactamente lo que pretendes. Otras veces, no lo es.
Algunas distribuciones alias (o puede escribir uno propio) mv a mv --interactivo , que le solicita confirmación. Algunos no. De cualquier manera, puede usar el --interactive o -i opción para asegurarse de que mv pide confirmación en caso de que dos archivos con el mismo nombre estén en conflicto:
$ mv --interactive example.txt ~/Documents
mv: overwrite '~/Documents/example.txt'?
Si no desea intervenir manualmente, use --no-clobber o -n en cambio. Esta bandera rechaza silenciosamente la acción de movimiento en caso de conflicto. En este ejemplo, un archivo llamado example.txt ya existe en ~/Documentos , por lo que no se mueve del directorio actual como se indica:
$ mv --no-clobber example.txt ~/Documents
$ ls
example.txt
Mover con copias de seguridad
Si está utilizando GNU mv , hay opciones de respaldo que ofrecen otro medio de movimiento seguro. Para crear una copia de seguridad de cualquier archivo de destino en conflicto, use -b opción:
$ mv -b example.txt ~/Documents
$ ls ~/Documents
example.txt example.txt~
Esta bandera asegura que mv completa la acción de mover, pero también protege cualquier archivo preexistente en la ubicación de destino.
Otra opción de copia de seguridad de GNU es --backup , que toma un argumento que define cómo se llama el archivo de copia de seguridad:
- existente :si ya existen copias de seguridad numeradas en el destino, se crea una copia de seguridad numerada. De lo contrario, el simple se utiliza el esquema.
- ninguno :no crea una copia de seguridad incluso si --backup Está establecido. Esta opción es útil para anular un mv alias que establece la opción de copia de seguridad.
- numerado :agrega un número al archivo de destino.
- sencillo :agrega el archivo de destino con un ~ , que puede ocultarse convenientemente de su vista diaria con --ignore-backups opción para ls .
Por ejemplo:
$ mv --backup=numbered example.txt ~/Documents
$ ls ~/Documents
-rw-rw-r--. 1 seth users 128 Aug 1 17:23 example.txt
-rw-rw-r--. 1 seth users 128 Aug 1 17:20 example.txt.~1~
Se puede establecer un esquema de copia de seguridad predeterminado con la variable de entorno VERSION_CONTROL. Puede establecer variables de entorno en su ~/.bashrc archivo o dinámicamente antes de su comando:
$ VERSION_CONTROL=numbered mv --backup example.txt ~/Documents
$ ls ~/Documents
-rw-rw-r--. 1 seth users 128 Aug 1 17:23 example.txt
-rw-rw-r--. 1 seth users 128 Aug 1 17:20 example.txt.~1~
-rw-rw-r--. 1 seth users 128 Aug 1 17:22 example.txt.~2~
La --copia de seguridad opción aún respeta el --interactive o -i opción, por lo que aún le solicita que sobrescriba el archivo de destino, aunque crea una copia de seguridad antes de hacerlo:
$ mv --backup=numbered example.txt ~/Documents
mv: overwrite '~/Documents/example.txt'? y
$ ls ~/Documents
-rw-rw-r--. 1 seth users 128 Aug 1 17:24 example.txt
-rw-rw-r--. 1 seth users 128 Aug 1 17:20 example.txt.~1~
-rw-rw-r--. 1 seth users 128 Aug 1 17:22 example.txt.~2~
-rw-rw-r--. 1 seth users 128 Aug 1 17:23 example.txt.~3~
Puede anular -i con la --fuerza o -f opción.
$ mv --backup=numbered --force example.txt ~/Documents
$ ls ~/Documents
-rw-rw-r--. 1 seth users 128 Aug 1 17:26 example.txt
-rw-rw-r--. 1 seth users 128 Aug 1 17:20 example.txt.~1~
-rw-rw-r--. 1 seth users 128 Aug 1 17:22 example.txt.~2~
-rw-rw-r--. 1 seth users 128 Aug 1 17:24 example.txt.~3~
-rw-rw-r--. 1 seth users 128 Aug 1 17:25 example.txt.~4~
La --copia de seguridad la opción no está disponible en BSD mv .
Mover muchos archivos a la vez
Al mover varios archivos, mv trata el directorio final nombrado como el destino:
$ mv foo bar baz ~/Documents
$ ls ~/Documents
foo bar baz
Si el elemento final no es un directorio, mv devuelve un error:
$ mv foo bar baz
mv: target 'baz' is not a directory
La sintaxis de GNU mv es bastante flexible. Si no puede proporcionar el mv comando con el destino como argumento final, use el --target-directory o -t opción:
$ mv --target-directory=~/Documents foo bar baz
$ ls ~/Documents
foo bar baz
Esto es especialmente útil al construir mv comandos de la salida de algún otro comando, como buscar comando, xargs o GNU paralelo.
Movimiento basado en mtime
Con GNU mv , puede definir una acción de movimiento en función de si el archivo que se está moviendo es más nuevo que el archivo de destino que reemplazaría. Esta opción es posible con --update o -u y no está disponible en BSD mv :
$ ls -l ~/Documents
-rw-rw-r--. 1 seth users 128 Aug 1 17:32 example.txt
$ ls -l
-rw-rw-r--. 1 seth users 128 Aug 1 17:42 example.txt
$ mv --update example.txt ~/Documents
$ ls -l ~/Documents
-rw-rw-r--. 1 seth users 128 Aug 1 17:42 example.txt
$ ls -l
Este resultado se basa exclusivamente en el tiempo de modificación de los archivos, no en una diferencia de los dos archivos, así que utilícelo con cuidado. Es fácil engañar a mv con un simple toque comando:
$ cat example.txt
one
$ cat ~/Documents/example.txt
one
two
$ touch example.txt
$ mv --update example.txt ~/Documents
$ cat ~/Documents/example.txt
one
Obviamente, esta no es la función de actualización más inteligente disponible, pero ofrece una protección básica contra la sobrescritura de datos recientes.
Mudanza
Hay más formas de mover datos que solo el mv comando, pero como programa predeterminado para el trabajo, mv es una buena opción universal. Ahora que sabe qué opciones tiene disponibles, puede usar mv más inteligente que nunca.