opções alternativas para rm -f

10

Gostaria de executar uma linha de comando:

cd ~/www/tmp/; rm -P 2*

Mas recebo um erro se não houver arquivos começando com 2.

Você poderia pensar que eu gostaria de usar -f , no entanto:

-f      Attempt to remove the files without prompting for confirmation, regardless of the file's permissions.  If the file does not exist, do not display a diagnostic message or modify the exit status to reflect an error.

E eu faço me preocupo com permissões de arquivos - se há algo estranho acontecendo, eu prefiro o comando abortar. Eu só quero suprimir os erros 'não existem'.

Eu olhei para algumas outras perguntas com 'erros de rm', e encontrei estas duas que parecem (meio) relevantes:

Excluir arquivos e diretórios por seus nomes. Nenhum arquivo ou diretório desse tipo

Mas, eu não entendo tudo o que está acontecendo nas respostas para essa pergunta, e não sei se preciso disso?

A touch hack sugerida nesta pergunta:

Não rm não informar quando um arquivo estiver faltando

Parece viável, já que acho que não me importo com o desempenho (mas que tipo de impacto de performance você tomaria? - ie: isso é uma técnica razoavelmente escalável, ou estou apenas aprendendo hábitos muito ruins?)

Não sei como faria um if-then na linha de comando.

Existem outras opções para uma simples limpeza de cut-n-paste na linha de comando?

O find -delete funcionaria melhor no meu caso? Se sim, por quê?

erro em questão:

rm: 2*: No such file or directory
    
por user3082 26.06.2018 / 07:46

1 resposta

13

Para chamar apenas rm -P para arquivos regulares existentes cujos nomes correspondem a um padrão em um diretório (mas não abaixo):

find directory -maxdepth 1 -type f -name 'pattern' -exec rm -P {} +

Por exemplo,

find ~/www/tmp/ -maxdepth 1 -type f -name '2*' -exec rm -P {} +

Para corresponder apenas aos não diretórios, use ! -type d no lugar de -type f . A diferença é que ! -type d seria verdadeiro para uma faixa mais ampla de tipos de arquivos (links simbólicos, pipes nomeados, sockets, etc.)

Como você deseja que algumas condições sejam solicitadas nos arquivos encontrados, não use -delete em vez de -exec rm , pois isso funciona como rm -f .

Remova -maxdepth 1 para permitir que find procure em subdiretórios recursivamente.

    
por 26.06.2018 / 08:12