Forma correcta de eliminar el contenido del directorio

Forma correcta de eliminar el contenido del directorio

¿Cuál es la forma correcta de eliminar?todoel contenido de un directorio, sin dicho directorio?
Por ejemplo, tengo la siguiente estructura de directorios:

foo/
    bar1/
    bar2/
    x.txt

Quiero eliminar las carpetas bar1y bar2el archivo x.txt.sin borrar foo.

También considere los nombres de archivos con caracteres especiales que pueden ignorarse o generar un error.


Edición n.º 1 (30 de septiembre, 18:26 UTC):
Creo que mi pregunta no es un duplicado deesta pregunta, porque eso pedí borrartododentro de un directorio, mientras que la otra pregunta no y las respuestas no incluían dicha solución.

Respuesta1

Si conoce el directorio, puede hacerlo usando uno de estos comandos:

$ find foo/* -delete

$ rm -fr foo/*

$ find foo/* -exec rm -fr {} +

Si tiene archivos que comienzan con un punto ( .), necesitará una versión modificada de rm.

$ rm -fr foo/{*,.*}

Ejemplo

$ ls -l foo
drwxrwxr-x    6 saml saml  4096 Sep 27 09:43 .
drwx------. 263 saml saml 32768 Sep 27 09:42 ..
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir1
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir2
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir space1
drwxrwxr-x    2 saml saml  4096 Sep 27 09:43 dir space2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 .dot space1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 .dot space2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file2
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file space1
-rw-rw-r--    1 saml saml     0 Sep 27 09:43 file space2

$ rm -fr foo/{*,.*}
rm: cannot remove directory: `adir/.'
rm: cannot remove directory: `adir/..'
$

$ ls -l foo/
total 0
$

Repitiendo con un nuevo directorio de archivos:

$ find foo/* -delete
$

Tratar con personajes especiales

Si tiene un directorio con un nombre foo tasticque tiene un espacio, puede citarlo pero aún así usar un comodín:

Ejemplo

$ rm -fr "foo tastic"/*

Caracteres especiales

A menudo uso este truco para ver qué piensa el shell de mis brebajes de nombres de archivos antes de ejecutarlos. En el directorio de muestra que utilicé arriba:

$ ls -1 "archivo "* espacio de archivo1 espacio de archivo2

$ ls -1d "dir "* directorio espacio1 directorio espacio2

Al realizar estas pruebas de antemano, puede tener una idea de qué archivos/directorios estarán en juego cuando se use un comando que contenga el glob.

información relacionada