Cómo eliminar archivos y directorios rápidamente a través de la terminal (bash shell) [cerrado]

331

Desde la ventana de terminal:

Cuando uso el rmcomando solo puede eliminar archivos.
Cuando uso el rmdircomando, solo elimina las carpetas vacías.

Si tengo un directorio anidado con archivos y carpetas dentro de carpetas con archivos, etc., ¿hay alguna forma de eliminar todos los archivos y carpetas sin todos los tipos de comandos extenuantes?

Si hace la diferencia, estoy usando el shell mac bash de la terminal, no Microsoft DOS o Linux.

baduker
fuente
En caso de que desee restaurar los archivos en el futuro, no use "rm" para tales casos. Use "rm-trash": github.com/nateshmbhat/rm-trash
Natesh bhat

Respuestas:

761
rm -rf some_dir

-r "recursivo" -f "fuerza" (suprimir mensajes de confirmación)

¡Ten cuidado!

Jim Lewis
fuente
27
+1 y me alegro de que hayas agregado el mensaje "¡Ten cuidado!" parte ... definitivamente un comando "Sawzall" que puede convertir rápidamente un buen día en uno malo ... si se maneja descuidadamente.
itsmatt
55
como no hagas "# rm -rf /" te arrepentirás de eso:
DarthVader
1
@itsmatt: Sabes lo que dicen ... ¡dale a Sawzall a alguien, y de repente cada problema parece horas de diversión!
Jim Lewis
164
En una Mac? Haga esto en su lugar: brew install trashluego trash -rf some_dirEsto moverá el directorio no deseado a su cubo de basura en lugar de simplemente desvanecer el estilo Prestige en el éter. ( fuente )
zakdances
44
¡El enfoque de "basura" es genial!
anopres
59
rm -rf *

Eliminaría todo (carpetas y archivos) en el directorio actual.

¡Pero ten cuidado! Solo ejecute este comando si está absolutamente seguro de que está en el directorio correcto.

Prine
fuente
17
rm -rf es un comando muy arriesgado, siempre debe tener cuidado y especificar la carpeta que se eliminará.
eomeroff
8
¿Qué te parece correr ls -R *primero para ver qué eliminará?rm -rf *
Hammad Khan
Esto funciona bien para mí, gracias.
Monica Hübner
14

Sí hay. La -ropción le dice rma ser r ecursive, y quitar toda la jerarquía de ficheros raíz en sus argumentos; en otras palabras, si se le da un directorio, eliminará todo su contenido y luego realizará lo que efectivamente es un rmdir.

Las otras dos opciones que debe saber son -iy -f. -irepresenta i nteractive; hace que rmle avise antes de borrar cada archivo. -fsignifica f orce; continúa y elimina todo sin preguntar. -ies más seguro, pero -fes más rápido; solo úselo si está absolutamente seguro de que está eliminando lo correcto. Puede especificar esto con -ro no; Es un entorno independiente.

Y, como de costumbre, puede combinar interruptores: rm -r -ies justo rm -riy rm -r -fes rm -rf.

También tenga en cuenta que lo que está aprendiendo se aplica a bashen cada sistema operativo Unix: OS X, Linux, FreeBSD, etc. De hecho, rmla sintaxis 's es la misma en casi todos los depósitos en cada sistema operativo Unix. OS X, bajo el capó, es realmente un sistema BSD Unix.

Antal Spector-Zabusky
fuente
1
Aunque todas las opciones mencionadas anteriormente son estándar entre todos los sabores de Unix enumerados, también hay algunas diferencias. Por ejemplo, OS X (pero no Linux) tiene "rm -d", lo que elimina archivos o directorios vacíos. Aún así, +1 para el punto de que OS X es BSD internamente.
David Gelhar
Verdadero: el subconjunto POSIX está (más o menos) garantizado para funcionar de manera consistente en Unixen, pero cualquier cosa fuera de eso puede o no.
Antal Spector-Zabusky
2

Así que estaba buscando una forma de eliminar todos los archivos en un directorio, excepto algunos directorios y archivos, que quería mantener. Después de mucho buscar, ideé una forma de hacerlo usando find.

find -E . -regex './(dir1|dir2|dir3)' -and -type d -prune -o -print -exec rm -rf {} \;

Básicamente, utiliza expresiones regulares para seleccionar los directorios que se excluirán de los resultados y luego elimina los archivos restantes. Solo quería publicarlo aquí en caso de que alguien más lo necesitara.

msantoro12
fuente