¿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 .*

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.


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.


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.. .


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.


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


2

Oh mi zsh

rm -rf (.|)*

De nuevo, esto es solo para Zsh.


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 {} \;

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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.