![Forma correcta de eliminar el contenido del directorio](https://rvso.com/image/50569/Forma%20correcta%20de%20eliminar%20el%20contenido%20del%20directorio%20.png)
¿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 bar1
y bar2
el 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 tastic
que 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.