-and
é redundante, portanto, você pode simplesmente removê-lo e !
pode ser usado em vez do operador -not
não padrão. Você pode usar uma matriz bash para listar a exclusão de uma por linha. Não muito mais curto, mas mais fácil de ler e editar.
filters=(
! -name '*.DS_Store'
! -name '*.sh'
! -name '*.bash'
)
find . -type f \( "${filters[@]}" \) -print
Estendendo o acima para evitar também a queda em determinados diretórios usando -prune
:
filters=(
! -name '*.DS_Store'
! -name '*.sh'
! -name '*.bash'
)
prune_dirs=(
-name '*.tmp'
-o -name 'tmp'
-o -name '.Trash*'
)
find . -type d \( "${prune_dirs[@]}" \) -prune -o -type f \( "${filters[@]}" \) -print