¿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 -rv
creo 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 dontDeleteMe
no garantiza que el directorio se vuelva a crear con los mismos permisos / propietario (s). En su lugar, use una de lasfind dontDeleteMe/ -mindepth 1 -delete
variantes 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,
bash
proporcione una opción para hacer*
coincidir todo, incluso los objetos ocultos:Puede ser útil restablecer
dotglob
su 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
somedir
y niños de su (Grand-) incluyendo archivos "ocultos" punto, pero con exclusión desomedir
sí mismo debido-mindepth 1
, entonces-delete
ellos.fuente
Use la
xdev
opción para eliminar archivos solo dentro del límite del dispositivo.fuente
-delete
. Implica-depth
y 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
find
con la-delete
bandera:find dontDeleteMe/* -delete
El
/*
es importante ya que le indicafind
que busque solo DENTRO de la carpeta llamada "dontDeleteMe".También asegúrese de que la
-delete
bandera esté al final delfind
comando.fuente
dotglob
. De lo contrario, usar la-mindepth 1
opció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 dontDeleteMe
rm -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 elcd
comando falla por algún motivo (directorio no existe, privilegios, etc.), entonces elrm
comando no se ejecutará. Yo lo llamaría más seguro.fuente
rm -rf *
todos modos.borrará el directorio de trabajo actual
fuente