2010-04-15 11 views
237

Desde la ventana del terminal:
Cuando uso el comando rm, solo puedo eliminar archivos.
Cuando uso el comando rmdir solo elimina las carpetas vacías.Cómo eliminar archivos y directorios rápidamente a través del terminal (shell bash)

Si tengo un directorio con archivos y carpetas con archivos y carpetas en ellos, etc., ¿hay alguna forma de eliminar todos los archivos y carpetas sin tener que escribir todos los comandos extenuantes?

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

Respuesta

556
rm -rf some_dir 

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

Tenga cuidado!

+20

+1 y me alegro de que haya agregado "Tenga cuidado!" parte ... definitivamente un comando de "Sawzall" que puede convertir rápidamente un buen día en uno malo ... si se maneja descuidadamente. – itsmatt

+3

como no hacer "# rm -rf /" lamentará que: – DarthVader

+1

@itsmatt: Ya sabes lo que dicen ... ¡dale a alguien un Sawzall, y de repente todos los problemas parecen horas de diversión! –

34
rm -rf * 

eliminaría todo (carpetas o archivos) & en el directorio actual.

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

+14

rm -rf es un comando muy arriesgado, siempre debe tener cuidado y especificar la carpeta que se eliminará. – eomeroff

+6

¿Qué tal si ejecuta 'ls -R *' primero para ver qué será eliminado por 'rm -rf *' –

+0

Esto funciona bien para mí, gracias. –

11

Sí, la hay. La opción -r indica que rm es r ecursive, y elimina la jerarquía de archivos completa enraizada en sus argumentos; en otras palabras, si se le da un directorio, eliminará todos sus contenidos y luego realizará lo que efectivamente es un rmdir.

Las otras dos opciones que debe saber son -i y -f. -i significa i nteractive; hace que rm le pregunte antes de borrar cada archivo. -f significa f orce; sigue adelante y borra todo sin preguntar. -i es más seguro, pero -f es más rápido; solo úsela si está absolutamente seguro está borrando lo correcto. Puede especificarlos con -r o no; es un entorno independiente.

Y como de costumbre, se pueden combinar los interruptores: rm -r -i es sólo rm -ri y rm -r -f es rm -rf.

También tenga en cuenta que lo que está aprendiendo se aplica a bash en cada sistema operativo Unix: OS X, Linux, FreeBSD, etc. De hecho, la sintaxis rm '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.

+1

Aunque todas las opciones mencionadas anteriormente son estándar entre todos los sabores de Unix enumerados, también existen algunas diferencias. Por ejemplo, OS X (pero no Linux) tiene '" rm -d "', que elimina los archivos o los directorios vacíos. Aún así, +1 para el punto de que OS X es BSD internamente. –

+0

Verdadero --- el * subconjunto * POSIX está (más o menos) garantizado que funciona de manera uniforme en Unixen, pero cualquier cosa que esté fuera de eso puede o no ser así. –

2

Así que estaba buscando una manera de eliminar todos los archivos en un directorio a excepción de 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 {} \; 

Esencialmente se utiliza expresiones regulares para seleccionar los directorios a excluir de los resultados a continuación, elimina los archivos restantes. Solo quería ponerlo aquí en caso de que alguien más lo necesitara.

Cuestiones relacionadas