Como encontrar arquivos terminados em ~ e pyc? [duplicado]

0

Eu quero encontrar todos os arquivos (no subdiretório atual e todos os subdiretórios) que terminam em '~' ou 'pyc'. Para fazer isso, tentei o seguinte padrão find :

find . -name '*{~,pyc}'
find . -name '{*~,*.pyc}'

mas não listam nenhum dos arquivos presentes no diector. Por que esses padrões não funcionam? Como fazer isso certo?

Ao usar ls em vez de find (sem as aspas), recebo o resultado esperado (exceto que ls mostra apenas o diretório atual e não todos os subdiretórios).

    
por Alex 06.04.2013 / 07:45

3 respostas

4

Seria muito mais fácil com a expressão regular se você tivesse o GNU encontrado,

find . -regextype posix-egrep -regex '.*(~|pyc)$'

P.S Suponho que você esteja usando a expansão do shell com o find? Se assim for, isso não é possível, use find . -name '*.pyc' -o -name '*~' .

    
por 06.04.2013 / 07:59
5
find . -type f \( -name "*~" -o -name "*pyc" \)

Isso retornará todos os arquivos ( -type f ) que terminam com ~ ou ( -o ) pyc .

    
por 06.04.2013 / 08:01
3

Se a compacticidade for posterior, com zsh :

printf '%s\n' **/*(~|pyc)(.D)

( D para dotfiles também, . apenas para arquivos regulares)

Se você quisesse usar a expansão de chave de concha, teria que fazer coisas como:

eval 'find . -type f ! \(' '! -name \*'{~,pyc} '\)'

Que o shell se expande para:

eval 'find . -type f ! \(' '! -name \*~' '! -name \*pyc' '\)'

Qual é então perguntar ao shell para avaliar esta linha de comando:

find . -type f ! \( ! -name \*~ ! -name \*pyc \)
    
por 06.04.2013 / 10:03