GNU/Linux >> Tutoriales Linux >  >> Linux

Mover archivos en Linux sin mv

El humilde mv El comando es una de esas herramientas útiles que encuentra en cada caja POSIX que encuentra. Su trabajo está claramente definido y lo hace bien:mover un archivo de un lugar a otro en un sistema de archivos. Pero Linux no es más que flexible, y hay otras opciones para mover archivos. El uso de diferentes herramientas puede proporcionar pequeñas ventajas que encajan perfectamente con un caso de uso específico.

Antes de alejarse demasiado de mv , eche un vistazo a los resultados predeterminados de este comando. Primero, cree un directorio y genere algunos archivos con permisos establecidos en 777:

$ mkdir example
$ touch example/{foo,bar,baz}
$ for i in example/*; do ls /bin > "${i}"; done
$ chmod 777 example/*

Probablemente no lo piense de esta manera, pero los archivos existen como entradas, llamados nodos de índice (comúnmente conocidos como inodos ), en un sistema de archivos. Puede ver qué inodo ocupa un archivo con el comando ls y su --inode opción:

$ ls --inode example/foo
7476868 example/foo

Como prueba, mueva ese archivo del directorio de ejemplo a su directorio actual y luego vea los atributos del archivo:

$ mv example/foo .
$ ls -l -G -g --inode
7476868 -rwxrwxrwx. 1 29545 Aug  2 07:28 foo

Como puede ver, el archivo original, junto con sus permisos existentes, se "movió", pero su inodo no cambió.

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

Así es el mv La herramienta está programada para mover un archivo:deje el inodo sin cambios (a menos que el archivo se mueva a un sistema de archivos diferente) y conserve su propiedad y permisos.

Otras herramientas ofrecen diferentes opciones.

Copiar y eliminar

En algunos sistemas, la acción de movimiento es una verdadera acción de movimiento:los bits se eliminan de un punto del sistema de archivos y se reasignan a otro. Este comportamiento ha caído en gran medida en desgracia. Las acciones de movimiento ahora son reasignaciones de atributos (un inodo ahora apunta a una ubicación diferente en su organización de archivos) o fusiones de una acción de copia seguida de una acción de eliminación.

La intención filosófica de este diseño es garantizar que, si un movimiento falla, un archivo no queda en pedazos.

El cp comando, a diferencia de mv , crea un nuevo objeto de datos en su sistema de archivos. Tiene una nueva ubicación de inodo y está sujeto a su umask activo. Puedes imitar un movimiento usando el cp y rm (o papelera si la tienes) comandos:

$ cp example/foo .
$ ls -l -G -g --inode
7476869 -rwxrwxr-x. 29545 Aug  2 11:58 foo
$ trash example/foo

El nuevo foo El archivo de este ejemplo obtuvo 775 permisos porque el umask de la ubicación excluye específicamente los permisos de escritura:

$ umask
0002

Para obtener más información sobre umask, lea el artículo de Alex Juarez sobre permisos de archivos.

Cat y quitar

Similar a copiar y eliminar, usando el gato (o tac , para el caso) asigna diferentes permisos cuando se crea su archivo "movido". Suponiendo un entorno de prueba nuevo sin foo en el directorio actual:

$ cat example/foo > foo
$ ls -l -G -g --inode
7476869 -rw-rw-r--. 29545 Aug 8 12:21 foo
$ trash example/foo

Esta vez, se creó un nuevo archivo sin establecer permisos previos. El resultado está totalmente sujeto a la configuración de umask, que no bloquea ningún bit de permiso para el usuario y el grupo (el bit ejecutable no se otorga para archivos nuevos independientemente de umask), pero bloquea el bit de escritura (valor dos) de otros. El resultado es un archivo con permiso 664.

Rsync

El rsync El comando es una herramienta multipropósito robusta para enviar archivos entre hosts y ubicaciones de sistemas de archivos. Este comando tiene muchas opciones disponibles, incluida la capacidad de hacer que su destino refleje su fuente.

Puede copiar y luego eliminar un archivo con rsync utilizando --remove-source-files opción, junto con cualquier otra opción que elija para realizar la sincronización (una opción común y de uso general es --archive ):

$ rsync --archive --remove-source-files example/foo .
$ ls example
bar  baz
$ ls -lGgi
7476870 -rwxrwxrwx. 1 seth users 29545 Aug 8 12:23 foo

Aquí puede ver que se retuvo el permiso y la propiedad del archivo, se actualizó la marca de tiempo y se eliminó el archivo de origen.

Una palabra de advertencia: No confunda esta opción con --delete , que elimina archivos de su destino directorio. Mal uso de --delete puede borrar la mayoría de sus datos, y se recomienda que evite esta opción excepto en un entorno de prueba.

Puede anular algunos de estos valores predeterminados, cambiando la configuración de permisos y modificaciones:

$ rsync --chmod=666 --times \
--remove-source-files example/foo .
$ ls example
bar  baz
$ ls -lGgi
7476871 -rw-rw-r--. 1 seth users 29545 Aug 8 12:55 foo

Aquí se respeta el umask del destino, por lo que --chmod=666 La opción da como resultado un archivo con permisos 664.

Sin embargo, los beneficios van más allá de los permisos. El rsync El comando tiene muchas opciones útiles (una de las cuales es --exclude marca para que pueda eximir elementos de una operación de movimiento grande) que la convierten en una herramienta más robusta que la simple mv dominio. Por ejemplo, para excluir todos los archivos de copia de seguridad al mover una colección de archivos:

$ rsync --chmod=666 --times \
--exclude '*~' \
--remove-source-files example/foo .

Establecer permisos con la instalación

La instalación El comando es un comando de copia dirigido específicamente a los desarrolladores y se invoca principalmente como parte de la rutina de instalación de la compilación de software. No es muy conocido entre los usuarios (y a menudo me pregunto por qué obtuvo un nombre tan intuitivo, dejando meros acrónimos y apodos para los administradores de paquetes), pero instalar es en realidad una forma útil de poner los archivos donde quieras.

Hay muchas opciones para la instalación comando, incluido --backup y --comparar comando (para evitar "actualizar" una copia más nueva de un archivo).

A diferencia de cp y gato , pero exactamente como mv , la instalación El comando puede copiar un archivo conservando su marca de tiempo:

$ install --preserve-timestamp example/foo .
$ ls -l -G -g --inode
7476869 -rwxr-xr-x. 1 29545 Aug  2 07:28 foo
$ trash example/foo

Aquí, el archivo se copió en un nuevo inodo, pero su mtime no cambio. Sin embargo, los permisos se establecieron para instalar predeterminado de 755 .

Puede usar instalar para establecer los permisos, el propietario y el grupo del archivo:

$ install --preserve-timestamp \
--owner=skenlon \
--group=dialout \
--mode=666 example/foo .
$ ls -li
7476869 -rw-rw-rw-. 1 skenlon dialout 29545 Aug  2 07:28 foo
$ trash example/foo

Mover, copiar y eliminar

Los archivos contienen datos y los archivos realmente importantes contienen su datos. Es importante aprender a administrarlos sabiamente, y ahora tiene el conjunto de herramientas para asegurarse de que sus datos se manejen exactamente de la manera que desea.

¿Tiene una forma diferente de administrar sus datos? Cuéntanos tus ideas en los comentarios.


Linux
  1. Copiar archivos en la terminal de Linux

  2. Mover archivos en la terminal de Linux

  3. Cómo convertir archivos a codificación UTF-8 en Linux

  4. Cómo ver o cambiar ACL en archivos de Linux

  5. Mover un archivo en Linux en C

Comando ls en Linux para listar archivos

Cómo cambiar el nombre de un archivo (s) en Linux

[Consejos de Bash] Cambiar el nombre de los archivos sin escribir el nombre completo dos veces en Linux

Cómo encontrar archivos basados ​​en la marca de tiempo en Linux

Cómo eliminar archivos enumerados en otro archivo en Linux

Cómo comprimir un archivo en Linux