¿Cómo elimino todo en un directorio?

25

¿Cómo elimino todo en un directorio, incluidos los archivos y directorios ocultos?

En este momento, uso lo siguiente:

rm -rf *
rm -rf .*
David Smith
fuente
55
Puedes combinarlos con rm -rf .* *.
Usuario desconocido
2
Puede subir un directorio y luego ejecutarrm -rf yourdirectory/*
shreyansp
1
lo siento, perdí la parte del directorio oculto La solución de usuarios anteriores cubre eso
shreyansp
Esa segunda opción que publicaste es muy peligrosa. Coincidirá con el ..directorio, que eliminará lo que esté en el directorio anterior .
Richard Peterson

Respuestas:

17

Simple y directo:

find -delete 

Incluye directorios y archivos ocultos. Al menos gnu-find lo sabe -delete, tu findpuede ser diferente.

usuario desconocido
fuente
1
Para evitar eliminar el directorio, use find /path -delete -mindepth 1.
orodbhen
@orodbhen: find -delete no eliminará el directorio, donde ejecuta el comando (como en la pregunta con rm).
usuario desconocido
11

La mejor respuesta es: no hagas eso. Elimine recursivamente el directorio en sí, luego vuelva a crearlo como un directorio vacío. Es más confiable y más fácil para otras personas entender lo que estás tratando de hacer. Cuando vuelve a crear el directorio, puede tener un propietario, un grupo y permisos diferentes. Si eso es importante, tenga cuidado. Además, si algún programa en ejecución tiene identificadores de archivo abiertos (descriptores) en el directorio, entonces no querrá eliminarlo. Si ninguno de esos casos especiales se aplica, entonces es más sencillo eliminar todo el directorio.

Chris Quenelle
fuente
77
Entonces, ¿cómo es eso más fácil? "Ten cuidado" no es una respuesta. No entendería por qué alguien elimina un directorio y lo reconstruye nuevamente.
usuario desconocido
Agregué la frase "como un directorio vacío", quizás eso sea más claro.
Chris Quenelle
2
No, no explica por qué eliminas un directorio y lo vuelves a crear. A las cosas a considerar pertenece, por cierto, fecha / hora de creación también.
usuario desconocido el
2
Si ese directorio es el directorio de trabajo actual de algún proceso, puede tener problemas. Además, si elimina el directorio, elimina la información sobre sus permisos y propiedad.
8
rm -rf -- * .[!.]* ..?*

Cada uno de los tres patrones se expande a sí mismo si no coincide con nada, pero eso no es un problema aquí, ya que queremos hacer coincidir todo e rm -fignorar los argumentos inexistentes.

Tenga en cuenta que .*coincidiría.. .

Gilles 'SO- deja de ser malvado'
fuente
5

Asumiendo bash 4+:

shopt -s dotglob
rm -rf -- *
##or:
rm -rf ./*

Con dotglob habilitado, se *expande a todos los archivos y directorios, incluso aquellos que comienzan con ., pero no se expande a .y .., por lo que es seguro usarlo rm.

maldad
fuente
2

si estás en el directorio:

cd .. && rm -rf dir && mkdir dir && cd dir

de otra manera:

rm -rf /path/to/dir && mkdir /path/to/dir

David Harris
fuente
2

Oh mi zsh

rm -rf (.|)*

De nuevo, esto es solo para Zsh.

phunehehe
fuente
2
O *(D)(el Dcalificador global activa la glob_dotsopción para este patrón).
Gilles 'SO- deja de ser malvado'
O rm -rf {.,}*(a diferencia de bash, zsh no incluye .e ..into {.,}*, al menos en mi máquina).
Sasha
1

¿Qué hay de usar find. Creo que esta es generalmente una buena opción, cuando tienes que buscar en los subdirectorios.

find . -type f -exec rm {} \;
slashdot
fuente
1
hay un interruptor -delete, por lo que puede eliminar directorios. (al menos en gnu-find).
usuario desconocido
esto no eliminará subdirectorios
sasha
-2

Tratar rm -rf *?*. Esto eliminará los archivos normales y ocultos.

gladimdim
fuente
44
No en ninguna concha que yo sepa.
Gilles 'SO- deja de ser malvado'
estás en lo correcto. no elimina los subdirectorios.
gladimdim
44
Es más probable que el problema sea que *?*no coincidirá con los archivos / directorios "punto" (a menos que haya habilitado la dotglobopción en bash , la GLOB_DOTSopción en zsh o un equivalente para cualquier shell que esté utilizando).
Chris Johnsen el