Encontre arquivos e exclua alguns diretórios

Atualmente estou trabalhando em meus dotfiles e precisava encontrar uma maneira de encontrar arquivos com *.zshextensão dentro de uma pasta. E isso funcionou bem na minha máquina (osx, zsh).

DOT=$HOME/.dotfiles
find $DOT
-follow -name "*.zsh"
! -path "$DOT/zsh/tools/*"
! -path "$DOT/backup/*"

Destinado a funcionar em uma única linha

O -followsinalizador diz ao find para seguir os links simbólicos e, neste caso, eu precisava disso, pois $HOME/.dotfilesé um link que aponta para outro diretório em meu sistema.

Os símbolos de exclamação !são negações e combinados com -pathtell find para ignorar essas pastas.

Exemplo

Eu o uso dentro do meu .zshrcarquivo para criar *.zsharquivos dentro dos meus dotfiles

function ls-zsh-files {
find $DOT
-follow -name "*.zsh"
! -path "$DOT/zsh/tools/*"
! -path "$DOT/backup/*"
}

# source all files with a .zsh config files
for zshfile in $(ls-zsh-files)
source $zshfile

Além disso, o ls-zsh-fileé disponibilizado para o shell, para que possa ser executado de qualquer lugar

zsh> ls-zsh-files

Isso é útil para solucionar problemas e descobrir quais *.zsharquivos são originados.