O que é equivalente a rm 'find lib / -name * .swp' sem localizar?

2

Como no título, gostaria de remover todos os arquivos no diretório lib com .swp no final.

Como posso fazer isso sem find em:

rm 'find lib/ -name *.swp'
    
por Patryk 21.01.2013 / 23:04

2 respostas

4

O benefício para encontrar é que é recursivo. Algumas shells modernas oferecem recursão de pesquisa, mas ela não está no padrão POSIX, então você não pode confiar nelas para trabalhar em qualquer lugar. Aqui está um exemplo que funciona no bash 4.0 e superior.

shopt -s globstar
for f in **/*.swp; do
    rm -- "$f"
done

No que diz respeito ao comando find que você já possui, ele irá quebrar em quaisquer arquivos que contenham espaços em branco, como espaços. Aqui está um exemplo fixo:

find lib/ -name '*.swp' -exec rm {} +

Com algumas versões de find , você pode usar -delete :

find lib/ -name '*.swp' -delete
    
por 21.01.2013 / 23:39
1
cd lib && ls -R  | grep '\.swp$' | xargs -d '\n' rm

Quanto ao seu original, eu teria feito isso:

find lib -name '*.swp' | xargs -d '\n' rm

porque se find não retornar resultados, você não receberá um erro.

Você também pode querer usar \! -type d então find não retorna nenhum diretório que por acaso seja chamado de *.swp , porque rm não conseguiria removê-los. Você poderia fazer algo semelhante com minha alternativa usando ls -RF , porque os diretórios obteriam um / à direita, portanto, não corresponderia à regex.

    
por 21.01.2013 / 23:26