usando buscar en bash para operar archivos en función de sus patrones de extensión

usando buscar en bash para operar archivos en función de sus patrones de extensión

Estoy usando el comando "buscar" para eliminar algunos archivos inútiles de las extensiones dadas de todas las subcarpetas ubicadas en el directorio desde el cual estoy ejecutando el comando.

find -type f -name *.txt -delete
find -type f -name *.xml -delete
find -type f -name *.pdbqt -delete
find -type f -name *.txt -delete

¿Es posible combinar estos 4 comandos en uno para eliminar 4 tipos de archivos mediante 1 comando? ¿Es posible utilizar alternativamente buscar para eliminar TODOS los archivos que NO pertenecen a las extensiones *.dlg?

Respuesta1

Sin comillas *.txtes malo. VerfindLa utilidad no genera todos los archivos cuando se utilizan comodines..

¿Es posible combinar estos 4 comandos en uno?

Sí. VerCombinando varios findcomandos en uno.

find . \( -name '*.txt' -o -name '*.xml' -o -name '*.pdbqt' \) …

(Esto usa 3 patrones porque su cuarto comando duplica el primero y no tiene sentido usar el mismo patrón dos veces).

¿Es posible utilizarlo alternativamente findpara eliminar TODOS los archivos que NO pertenecen a las *.dlgextensiones?

Sí (y supongo que quieres archivos normales, no todosarchivos):

find . -type f ! -name '*.dlg'        # -delete

Si el comando anterior imprime archivos que realmente desea eliminar, ejecútelo con #eliminación.

La ! -name '*.dlg'prueba es negada -name '*.dlg'. Tiene éxito si y sólo si -name '*.dlg'fracasa.

Lo usaste -deleteen la pregunta, por lo que findaparentemente lo apoyas. Los usuarios con menos potencia findvenfind: -exec rm {} \;vs. -delete- ¿por qué se recomienda ampliamente el primero?

Tenga en cuenta que en su caso, bare findfunciona como find .. Lo usé find .explícitamente porque algunas implementaciones findrequieren al menos una ruta en la línea de comando.

información relacionada