Este artículo continúa una serie de artículos sobre el shell de Linux y cubre las tres formas más útiles de eliminar archivos y directorios. También cubrimos casos excepcionales como eliminar directorios con una gran cantidad de archivos dentro, eliminar archivos o directorios con caracteres especiales en sus nombres. Mejore sus habilidades con Linux en solo 5 minutos.
comando “rmdir”
Antes de usar rmdir comando, debe saber que no recuperará fácilmente los objetos eliminados.
Ahora, abra la terminal de línea de comando si está usando Linux o macOS. Si usa Windows, puede usar el Subsistema de Windows para Linux (WSL).
Antes de eliminar el directorio, vamos a crearlo primero:
$ mkdir /tmp/docs
Ahora, eliminémoslo por el nombre /tmp/docs usando el siguiente comando:
$ rmdir /tmp/docs
rmdir es un comando para eliminar directorios vacíos. Es bastante útil, ya que está protegido contra la eliminación de algo importante de su sistema de archivos.
Validemos este comportamiento colocando un archivo dentro de un directorio, que nos gustaría eliminar:
$ mkdir -p /tmp/docs
$ touch /tmp/docs/my_file
$ tree /tmp/docs
/tmp/docs
└── my_file
0 directories, 1 file
Si su directorio no está vacío, recibirá el siguiente error:
$ rmdir /tmp/docs
rmdir: /tmp/docs: Directory not empty
Para eliminar el directorio, que contiene archivos, debe usar rm comando:
$ rm -rf /tmp/docs
Eliminar varios directorios usando comodines
Todos los comandos de la consola en Linux pueden procesar archivos y carpetas usando comodines (*) en el nombre del archivo o carpeta. Eliminemos la siguiente estructura de carpetas:
$ tree /tmp/docs
/tmp/docs
├── dir1
├── dir2
└── dir3
3 directories, 0 files
Para eliminar todos los directorios, que comienza desde dir necesitamos usar el siguiente comando:
$ rmdir /tmp/docs/dir*
Este es el resultado esperado:
$ tree /tmp/docs
/tmp/docs
0 directories, 0 files
comando “rm”
La empresa El comando es un comando de propósito general que puede eliminar no solo directorios sino también archivos. Pero el comportamiento predeterminado del rm El comando no le permite eliminar ninguna carpeta. Puedes usar -r o -R argumentos para eliminar directorios, incluidos los subdirectorios.
Imaginemos que tenemos la siguiente estructura de sistema de archivos:
$ tree /tmp/docs
/tmp/docs
├── dir1
│ └── my_file1
├── dir2
│ └── my_file2
└── dir3
└── my_file3
3 directories, 3 files
Si desea eliminar el /tmp/docs directorio completamente, use el siguiente comando:
$ rm -rf /tmp/docs
donde:
- -r – un intento de eliminar todos los subdirectorios de un directorio en particular.
- -f – un intento de eliminar los archivos sin confirmación o permiso previo.
/bin/rm:Lista de argumentos demasiado larga
Puede recibir este mensaje de error cuando intenta eliminar un directorio con muchos archivos. Este error ocurre porque la cantidad de archivos proporcionados al rm El comando es más grande que el límite del sistema en el tamaño del argumento de la línea de comandos.
La forma más fácil de eliminar una carpeta de este tipo es usar buscar comando para eliminar primero todos los archivos y luego eliminar el directorio en sí:
$ find /tmp/docs -type f -delete
$ rm -r /tmp/docs
Aquí:
- /tmp/docs – directorio de búsqueda.
- -tipo f – le dice a la utilidad de búsqueda que solo busque archivos.
- -eliminar – le dice a la utilidad de búsqueda que elimine los resultados encontrados.
También puede crear una carpeta vacía y usar rsync utilidad:
$ mkdir empty_dir
$ rsync -a --delete empty_dir/ /tmp/docs/
Esto consume CPU, pero es la forma más rápida de limpiar /tmp/docs directorio.
comando “buscar”
El comando de búsqueda es una utilidad de línea de comandos de búsqueda multipropósito, que requiere un artículo aparte, pero en nuestro caso, lo usaremos para eliminar las carpetas.
Eliminar utilizando patrón en el nombre
Eliminemos todos los directorios por el patrón dir* en nombres de directorios anidados:
$ tree /tmp/docs
/tmp/docs
├── dir1
│ └── my_file1
├── dir2
│ └── my_file2
└── dir3
└── my_file3
3 directories, 3 files
Use el siguiente comando para hacerlo:
$ find /tmp/docs -type d -name 'dir*' -exec rm -rf {} +
$ tree /tmp/docs
/tmp/docs
0 directories, 0 files
Aquí, el buscar El comando devolverá todos los directorios anidados cuyo nombre comience desde dir :
$ find /tmp/docs -type d -name 'dir*'
/tmp/docs/dir2
/tmp/docs/dir3
/tmp/docs/dir1
Y luego ejecuta el ya familiar rm -rf comando para cada hallazgo (es por eso que estamos usando {} + secuencia).
Eliminar todos los directorios vacíos en la estructura de carpetas
En muchos casos, es posible que desee eliminar solo carpetas vacías dentro de la estructura de carpetas. Eliminemos dir1 y otro_dir del siguiente ejemplo:
$ tree /tmp/docs
/tmp/docs
├── dir1
├── dir2
│ └── my_file2
├── dir3
│ └── my_file3
└── other_dir
4 directories, 2 files
Así es como se hace:
$ find /tmp/docs -type d -empty -delete
$ tree /tmp/docs
/tmp/docs
├── dir2
│ └── my_file2
└── dir3
└── my_file3
2 directories, 2 files
Eliminar archivos con caracteres especiales (por inode)
Si el nombre de su directorio contiene un carácter especial o consiste en palabras que no están en inglés, entonces el habitual rm o rmdir El comando puede no funcionar para usted. En ese caso, puede eliminar ese directorio usando su inodo.
Inodo:es un número de nodo de índice que representa un archivo o directorio en el sistema de archivos.
Puede encontrar el número de inodo de archivo o directorio usando el siguiente comando:
$ ls -il /tmp/docs
total 0
8669007889 drwxr-xr-x 3 amaksimov wheel 96 Dec 1 18:48 dir2
8669007891 drwxr-xr-x 3 amaksimov wheel 96 Dec 1 18:46 dir3
En este ejemplo, dir2 la carpeta tiene el inodo 8669007889 número.
Ahora, podemos usar esta información para eliminarlo:
$ find /tmp/docs -inum 8669007889 -exec rm -rf {} +
Aquí:
- -inum – le dice a la utilidad de búsqueda que busque el objeto del sistema de archivos con el número de inodo 8669007889 .
- -ejec rm -rf – le dice a la utilidad find que llame a rm con -rm argumentos para cada hallazgo ({} + ).
Resumen
En este artículo, describimos tres formas de eliminar directorios en Linux. También cubrimos casos especiales como la eliminación de carpetas o directorios enormes con caracteres especiales en sus nombres.
Esperamos que este artículo le resulte útil. Si es así, por favor, ayúdanos a difundirlo por el mundo.
Si conoce otros casos de uso interesantes, que pueden ser cubiertos por el artículo, comuníquese con nosotros en la sección de comentarios a continuación.