encuentre todos los directorys (excepto `codificado`) en el directory de trabajo y luego elimínelos

Estoy tratando de probar este escenario, tengo estos files

/encoded encode <~~~ a bash script /dir1 /dir2 .../dir2-sub test.meta 

lo que deseo es que find search todos los directorys en nuestro codificado actual (excepto), luego elimine todos ellos

Terminé usando este script:

find . -name encoded -prune -o -maxdepth 10 ! -name 'encode*' ! -name '.*' | xargs rm -rf

lo que creo que debería hacer es marcar la carpeta encoded continuación, -prune , por lo que la ignoraría, ¿verdad? luego, para cualquier otro, que no tenga extensión (lo que asegura que todos sean dir) elimínelo a través de rm

pero el problema es … También tengo un script bash sin nombre de extensión, por lo que terminó siendo borrado

lo que deseo es que mi bashscript termine desde la estructura anterior exactamente como esta (manteniendo intactos todos los directorys no intactos, no toque / codifique la carpeta y su contenido, y no elimine la secuencia de commands codifique bash)

 /encoded encode <~~~ a bash script test.meta 

¿cómo puedo get el resultado anterior? Espero que alguien pueda ayudar gracias!

Solutions Collecting From Web of "encuentre todos los directorys (excepto `codificado`) en el directory de trabajo y luego elimínelos"

No necesita enumerar recursivamente directorys para eliminarlos con rm -rf ; simplemente puede enumerar los directorys de nivel superior que desea eliminar. Para determinar si una input de directory es un directory en lugar de un file, puede usar find 's -type d test; usando no es un buen indicador.

Lo siguiente debería funcionar para usted:

 find * -maxdepth 0 ! -name encoded -type d -print0 | xargs -0 rm -rf 

Esto comienza desde todas las inputs en el directory actual (para evitar el listdo), descarta todo aquello cuyo nombre esté encoded y solo guarda directorys; Emite el resultado usando un nulo como delimitador, y alimenta el resultado en xargs para dar a rm -rf . Antes de ejecutar esta variante, testing

 find * -maxdepth 0 ! -name encoded -type d 

para ver si el resultado coincide con lo que espera.

-prune no ignora su coincidencia, evita descender a ella; por lo tanto, en su ejemplo, el encoded aún aparece en la list, y luego se filtra mediante la testing -name .