¿Existe un comando para eliminar todos los archivos y subdirectorios en un directorio SIN eliminar el directorio?
Por ejemplo, si tengo el directorio "dontDeleteMe" con los subdirectorios "1", "2", "3" y cada subdirectorio tiene algunas imágenes, ¿cómo puedo eliminar los subdirectorios "1", "2" y "3" y todos los archivos en ellos, sin eliminar el directorio principal "dontDeleteMe"?
fuente

find dontDeleteMe/* -print0 | xargs -0 rm -rvcreo que en la mayoría de los casos esto funcionará, independientemente de los espacios, y lo que no. Pero cd/tmp/y haga un directorio de prueba y pruébelo. :)rm -rf dontDeleteMe && mkdir dontDeleteMeno garantiza que el directorio se vuelva a crear con los mismos permisos / propietario (s). En su lugar, use una de lasfind dontDeleteMe/ -mindepth 1 -deletevariantes a continuación.La única razón por la
rm -r ./*que no siempre funciona es porque puede tener archivos y / o carpetas ocultos que no coinciden*.Para este fin,
bashproporcione una opción para hacer*coincidir todo, incluso los objetos ocultos:Puede ser útil restablecer
dotglobsu estado predeterminado (sin establecer), si continúa utilizando el shell donde ejecutó los comandos anteriores:fuente
Terminal abierta ( Ctrl+ Alt+ T) hormiga escriba esto:
Esto coincidirá con todos los archivos y directorios dentro
somediry niños de su (Grand-) incluyendo archivos "ocultos" punto, pero con exclusión desomedirsí mismo debido-mindepth 1, entonces-deleteellos.fuente
Use la
xdevopción para eliminar archivos solo dentro del límite del dispositivo.fuente
-delete. Implica-depthy es más fácil de recordar que-depth -exec rm -Rf {} \;Para eliminar (en la terminal) todos los archivos y subdirectorios, excepto el directorio base llamado "dontdelete":
fuente
Puedes usar
findcon la-deletebandera:find dontDeleteMe/* -deleteEl
/*es importante ya que le indicafindque busque solo DENTRO de la carpeta llamada "dontDeleteMe".También asegúrese de que la
-deletebandera esté al final delfindcomando.fuente
dotglob. De lo contrario, usar la-mindepth 1opción de bandera parece ser la única forma de hacerlo funcionar.Que dices:
Eliminar todos los archivos que comienzan con. en "directorio" y todos los demás archivos también.
Aunque, como lo señaló Neftas, esta solución no es segura.
La solución más segura es:
fuente
.y..directorios. Esto puede evitarse cambiando{.*}a{.??*}, pero no eliminará los archivos ocultos con un solo carácter, como.a.No estoy seguro de por qué esto es tan complejo, ayúdame si me equivoco
Eso es
fuente
Hay una respuesta aún más simple:
cd dontDeleteMerm -rf *Tiempo de lectura de administración básica del sistema: asegúrese de prestar atención a dónde se encuentra cuando use comandos de barrido como este.
No puedo decir eso lo suficiente. Tuve que recuperar una caja porque alguien no estaba prestando atención y escribió
rm -rf *mientras estaba en /.* nix asume que si eres root o si estás sudopeando como root, sabes lo que estás haciendo. Así que asegúrese de saber lo que está haciendo antes de hacerlo.
Una alternativa que asegura que su comando 'cd' funcione antes de emitir 'rm' es usar
fuente
cd dontDeleteMe && rm -rf *&&operador no solo encadena los comandos; requiere que cada comando sea exitoso antes de que se ejecute el siguiente. Si elcdcomando falla por algún motivo (directorio no existe, privilegios, etc.), entonces elrmcomando no se ejecutará. Yo lo llamaría más seguro.fuente
rm -rf *todos modos.borrará el directorio de trabajo actual
fuente