Supongamos que bajo el directorio actual, hay múltiples subdirectorios, y uno se llama A.
¿Cómo eliminar todos los subdirectorios excepto A con Bash?
Bash ha extendido globbing (primera prueba, luego elimine el eco):
shopt -s extglob
echo rm -rf !(A)
shopt | grep ext
Puede ver si el complemento está habilitado.fuente
Qué pasa:
Esto evita algo del "miedo" de un error tipográfico en los otros comandos.
fuente
Algo como
debería hacer.
editar
Realmente debería ser
para evitar que se
find
repita debajo de A.fuente
Normalmente hago esto elaborando un comando ls que lo hace bien primero. No estoy en una máquina Unix, pero algo así como:
ls -lda "[^ A]"
Una vez que lo hagas bien, canalízalo a un comando
ls -lda "[^ A]" | xargs rm -rf
Siéntase libre de editar arriba si tengo mi expresión regular incorrecta ...
fuente
Si quieres ser más flexible pero manual, puedes hacer:
De esa manera puedes hacer munging general.
fuente
Aquí hay una manera. Tenga cuidado con este tipo de cosas, sin embargo, es tan poderoso que solo puede usarse para bien o para mal ...
fuente
No use find como algunas personas han mostrado con -exec y rm sin pasar -print0 para encontrar y -0 a xargs. Se confundirá en los nombres de archivos con espacios o líneas nuevas:
En su lugar, use find -print0 con xargs -0, '-exec command {} +', o -delete si su búsqueda lo admite.
fuente
Ver también aquí:
/programming/862388/delete-all-files-directories-except-two-specific-directories
fuente
Además del ejemplo anterior de:
también puedes hacer:
para evitar tener que hacerlo
cd some/subdir
primero.fuente