Eu tenho um script bash que desejo remover arquivos de vários diretórios. Freqüentemente, eles não estarão lá porque não foram gerados e isso é bom. Existe uma maneira de obter o script para não relatar esse erro, mas se a rm tiver alguma outra saída para relatar isso?
Como alternativa, existe um comando melhor para remover o arquivo menos barulhento?
Se o seu requisito é que
rm
não se queixe de arquivos ausentes, mas que você também queira obter outra saídarm
, minha sugestão seria primeiro testar a existência do arquivo de destino e chamarrm
( sem o-f
sinalizador) se o arquivo realmente existe.A chamada
rm -f
de um arquivo que, por exemplo, não possui permissões de gravação do usuário, removerá o arquivo e também não emitirá o prompt normal para esse cenário.Caso você queira usar a mesma idéia com vários arquivos, eu criaria uma definição de função, como:
Use-o como:
qrm file1 file2-does-not-exist *.txt etc here
fonte
Você afirmou que ainda deseja ver outra saída do
rm
comando ao executá-lo, mas o uso da-f
opção suprimirá esses itens. Você precisará filtrar o STDERR pelo que deseja, o que é um pouco complicado, pois você deseja que todo o resto seja exibido.Você vai querer usar um comando como este:
Comando explicado:
-f
argumento é forçar e não solicitar confirmação ou erros3>&1 1>&2 2>&3 3>&-
é alternar entre STDOUT e STDERR para filtragem (você pode ler mais sobre isso aqui, se quiser| grep -v 'No such file or directory'
está filtrando a mensagem que você não deseja verAgora, se você quiser suprimir totalmente as mensagens de erro, execute o seguinte comando:
Este comando redireciona STDERR para / dev / null, para que você não o veja quando executar o comando.
fonte
rm
sem-v
nunca mais saídas para stdout, apenas a stderr, portanto, neste caso, você poderia apenas2>&1 | grep
sem a dança que é útil em termos mais gerais,Como alternativa, você pode usar o
find
comando com a-delete
opção Isso (obviamente) excluirá apenas os arquivos encontrados, para que nunca avise se não houver. Um exemplo pode ser:que pesquisaria o
/var/log/triffids/
diretório e excluiria todos os arquivos com o.log
sufixo que não foram modificados por mais de 30 dias.É sempre uma boa idéia executar esses comandos sem a
-delete
opção primeiro, para garantir que ele encontre os arquivos que você espera.fonte
Marque a opção
--force
(-f
) derm
:fonte
Isso é um truque, mas você sempre pode
touch
remover o arquivo. Se não existir, será criado pararm
removê-lo.fonte
Você pode usar
-f
como quiser, de acordo com a página de manual:não solicitará nada e fará exatamente o que você deseja.
fonte
Existem duas maneiras principais: se você adicionar a opção -f, ela não mostrará o erro "não existe" e duas: (funciona para quase qualquer comando) em vez de apenas executar o "comando" do "comando 2> / dev / null "onde" o comando "é o comando que você está executando.
fonte