¿Cómo eliminar archivos y directorios en Linux?

Una de las tareas básicas de administración del sistema de archivos implica la creación, modificación y eliminación de diferentes tipos de archivos y directorios. Conocer algunas herramientas y conceptos básicos para la eliminación de archivos es útil y puede ahorrarle tiempo.

Linux ofrece varias herramientas que pueden ayudarnos a realizar tareas de eliminación de archivos. A menudo, necesitamos eliminar no solo uno, sino un montón de archivos y directorios, según algunos criterios. Es útil conocer algunos comandos comunes y sus combinaciones para hacer nuestra tarea fácilmente.

Remove using unlink

No es tan popular. Para eliminar un solo archivo de forma permanente, podemos usar unlink mando.

$ unlink {file-name}

Remove single file

Hay un comando de uso más común para eliminar archivos, es decir, rm comando, que admite la eliminación de uno o más archivos simultáneamente.

$ rm {file-name}

rm le solicita que confirme la eliminación del archivo para los archivos que están protegidos contra escritura; de lo contrario, procede a eliminar directamente el archivo. Para hacer rm siempre pregunte antes de eliminar un archivo, use -i bandera:

$ rm -i {file-name}

rm comando elimina sin mostrar ningún mensaje en la pantalla. Para enumerar que rm comando está haciendo realmente, use rm con -v bandera.

$ rm -v {file-name}

Para eliminar archivos protegidos contra escritura sin solicitar confirmación, utilice -f bandera.

$ rm -f {file-name}

Remove multiple files

Se pueden eliminar varios archivos especificando varios nombres de archivo para rm como argumentos.

$ rm {file-name-1} {file-name-2} {file-name-3} ... {file-name-N}

rm también admite expresiones regulares. Si desea eliminar todos los archivos nombrados file-name-*, puedes usar:

$ rm file-name-*

También podemos especificar varios archivos usando expresiones regulares. Si queremos borrar tres archivos que coincidan file-name-1, file-name-2 y file-name-3, podemos usar algo como:

$ rm file-name-[123]

Remove directory

Un directorio vacío se puede eliminar usando rm comando con -d .

$ rm -d {dir-name}

Las opciones admitidas para la eliminación de archivos también se pueden combinar con la eliminación de directorios utilizando -d bandera también. Por ejemplo:

$ rm -idv {dir-name}

Para eliminar un directorio que no está vacío, use -r bandera.

$ rm -r {dir-name}

Si no desea ningún mensaje antes de eliminar el directorio y su contenido, use -rf bandera. Esto eliminará todo dentro del directorio, incluido el directorio mismo sin ninguna confirmación. Tenga cuidado al usarlo, especialmente como raíz.

$ rm -rf {dir-name}

Find and remove files

Para requisitos más complejos, podemos utilizar el encontrar comando con diferentes opciones. Para eliminar todos los archivos que coincidan con el patrón {pattern} dentro de un camino dado por {dir-to-search}

$ find {dir-to-search} -type f -name {pattern} -exec rm -f {} \;

Ejemplo:

$ find /var/tmp -type f -name "*.tmp" -exec rm -f {} \;

Si queremos eliminar algo que coincida con un patrón {pattern} incluyendo directorios dentro {dir-to-search}, podemos modificar ligeramente el comando anterior como:

$ find {dir-to-search} -name {pattern} -exec rm -rf {} \;

Las versiones modernas del comando find admiten la función de eliminación internamente. aquí -delete bandera reemplaza el comando rm mientras -depth indica al comando find que primero procese el contenido del directorio antes que el directorio en sí:

$ find {dir-to-search} -type f -name {file-name-pattern} -depth -delete

El ejemplo anterior es más eficiente cuando se trabaja con una gran cantidad de archivos, ya que no genera un nuevo proceso externo para rm comando para cada archivo coincidente. Pero no todas las versiones de find comando (todavía) puede apoyar -delete bandera. Como alternativa, tenemos la opción de usar xargs comando con find como se muestra en el siguiente ejemplo a continuación:

$ find {dir-to-search} -type f -name {pattern} -print0 | xargs -0 rm

O use el comando ejecutivo + terminador para encadenar todo lo que encuentre el comando find como xargs:

$ find {dir-to-search} -name {pattern} -exec rm -rf {} +

Por defecto, el comando buscar usa -print bandera que normalmente nos saltamos la escritura. Con xargs, tenemos que evitar new-line carácter entre cada nombre de archivo. Como tal -print0 la bandera indica a buscar para imprimir null carácter después de cada nombre de archivo encontrado.

Del mismo modo, especificamos -0 bandera con xargs para que ambos comandos se acoplen. rm comando aquí elimina el archivo pasado por canalización find entrada. Por ejemplo, el siguiente comando buscará y eliminará todos *.tmp archivos del directorio de inicio del usuario actual (dado por ~ símbolo).

$ find ~ -name "*.tmp" -print0 | xargs -0 rm

find El comando ofrece varias formas de buscar archivos y directorios, incluida la propiedad, el permiso, la marca de tiempo, etc. Cubriremos algunas de estas formas que pueden ayudarnos en tareas específicas de eliminación de archivos.

Find and remove files by a user

Para eliminar todo dentro de un directorio dado propiedad de un user, Use:

$ find {dir-to-search} -mindepth 1 -user {user-name} -delete

En el ejemplo anterior, -mindepth bandera con valor 1 evita el directorio dado por {dir-to-search} de la eliminación si coincide con el patrón y los criterios de búsqueda. O para borrar todo dentro de un directorio dado que pertenece a un particular group, Use:

$ find {dir-to-search} -mindepth 1 -group {group-name} -delete

Si no desea recorrer los subdirectorios bajo la ruta de búsqueda, también tiene la opción de usar -maxdepth con el valor de profundidad de directorio apropiado.

Aquí hay un ejemplo de ejecución:

$ find tempdir/ -mindepth 1 -maxdepth 1 -user abhisheknair -group abhisheknair -delete

Si quieres especificar user-id y group-id en su lugar, puedes probar algo como:

$ find {dir-to-search} -mindepth 1 -uid {user-id} -gid {group-id} -delete

Find and remove empty directories

Para eliminar todos los directorios vacíos dentro de una ruta determinada {dir-to-search}, puedes usar:

$ find {dir-to-search} -type d -empty -delete

En cambio, para eliminar todos los archivos vacíos dentro de una ruta determinada {dir-to-search}, Use:

$ find {dir-to-search} -type f -empty -delete

Find and remove files older than X

A veces, es posible que deba eliminar archivos anteriores a x dias. find tiene opciones para leer la creación del archivo (ctime), acceso (atime) y modificación (mtime) veces. Nosotros podemos usar mtime opción con buscar para buscar y eliminar archivos modificados más de x hace días.

$ find {dir-to-search} -type f -mtime +{X} -delete

Por ejemplo, para eliminar todos los archivos con extensión log dentro /var/tmp con un tiempo de modificación de hace 30 días o más, podemos usar:

$ find /var/tmp -name "*.log" -type f -mtime +30 -delete

Find and remove files by permission

Ahora, también podemos eliminar archivos basados ​​en algún permiso específico, como:

$ find {dir-to-search} -name {pattern} -perm {NNN} -delete

Ejemplo:

$ find /var/tmp -name "temp*" -perm 755 -delete

O si queremos usar una forma simbólica de permiso, use:

$ find {dir-to-search} -name {pattern} -perm u={rwx},g={rwx},o={rwx} -delete

Ejemplo:

$ find /var/tmp -name "temp*" -perm u=rwx,g=rw,o=rw -delete

Recapitulación

Ofertas de Linux unlink, rm y rmdir comandos que son simples y se pueden ampliar fácilmente con el uso de expresiones regulares. Para necesidades más avanzadas, tiene la opción de utilizar una combinación de herramientas como find y xargs para lograr lo que necesitas. Aparte de los ejemplos de este artículo, tiene la opción de usar buscar con cualquiera de sus indicadores disponibles para personalizar su búsqueda. Consulte las páginas de manual de los comandos respectivos para obtener más información sobre ellos.

Siempre corre encontrar comandos sin rm or -delete marcar y analizar su salida para saber qué archivos o directorios se verán afectados por la ejecución de un comando real. Tener una configuración y una política de respaldo adecuadas ayuda no solo en caso de eliminaciones accidentales, sino también en casos de fallas de hardware y Ataques ciberneticos.