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.
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.
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.
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).
rm -rf .* *
.rm -rf yourdirectory/*
..
directorio, que eliminará lo que esté en el directorio anterior .Respuestas:
Simple y directo:
Incluye directorios y archivos ocultos. Al menos gnu-find lo sabe
-delete
, tufind
puede ser diferente.fuente
find /path -delete -mindepth 1
.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.
fuente
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 -f
ignorar los argumentos inexistentes.Tenga en cuenta que
.*
coincidiría..
.fuente
Asumiendo bash 4+:
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 usarlorm
.fuente
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
fuente
Oh mi zsh
De nuevo, esto es solo para Zsh.
fuente
*(D)
(elD
calificador global activa laglob_dots
opción para este patrón).rm -rf {.,}*
(a diferencia de bash, zsh no incluye.
e..
into{.,}*
, al menos en mi máquina).¿Qué hay de usar
find
. Creo que esta es generalmente una buena opción, cuando tienes que buscar en los subdirectorios.fuente
Tratar
rm -rf *?*
. Esto eliminará los archivos normales y ocultos.fuente
*?*
no coincidirá con los archivos / directorios "punto" (a menos que haya habilitado ladotglob
opción en bash , laGLOB_DOTS
opción en zsh o un equivalente para cualquier shell que esté utilizando).