Ignorar 'não é possível remover' dir ': é uma mensagem de diretório

2

Estou configurando um processo de automação no qual estou excluindo arquivos em um diretório que contém subdiretórios. Eu só quero excluir os arquivos no diretório e quero manter os subdiretórios intactos. Então, agora estou usando apenas rm * para excluir os arquivos desse diretório. No entanto, este comando lança a mensagem: cannt remove 'dir': Is a directory . Eu sei que estou sendo muito exigente, mas não quero que essa mensagem apareça repetidamente em meus registros. Existe um comando melhor que eu possa usar para exclusão ou uma maneira que eu possa dizer rm para ignorar os subdiretórios?

    
por requiemforameme 26.07.2016 / 18:48

3 respostas

2

Você pode simplesmente jogar fora as mensagens de erro:

rm * 2>/dev/null

Isso eliminará todos os erros. Se você quiser ver outros possíveis erros, podemos fazer algo mais complicado:

rm * 2>&1 | grep -v 'cannot remove .*: Is a directory'

Desta forma, outros erros ainda serão registrados.

    
por 26.07.2016 / 19:05
1

Aqui você está:

find ./ -type f -exec rm -f * {} \; 2> /dev/null

Se você deseja manter arquivos pares em seus subdiretórios intactos:

rm -f * 2> /dev/null
    
por 26.07.2016 / 18:51
1

No zsh:

rm *(^/)

Outros shells não têm equivalentes aos qualificadores do zsh. Em vez disso, você pode chamar find , que é capaz de discriminar arquivos por tipo, e dizer para não recorrer a subdiretórios além de . (o diretório inicial).

find . -name . -o -type d -prune -o rm -f {} +

Isso exclui os arquivos de pontos, enquanto * não corresponde aos arquivos de pontos. Se você deseja preservar os arquivos de ponto, informe find para não chamar rm neles.

find . -name . -o -type d -prune -o ! -name '.*' rm -f {} +

(Você pode usar -mindepth , -maxdepth e -delete , mas somente se não precisar que seu script seja executado em sistemas em que find não tenha essas opções. As opções que usei são portáteis .)

    
por 27.07.2016 / 00:09