Respostas:
Não se preocupe em verificar se o arquivo existe, tente removê-lo.
rm -f /p/a/t/h
# or
rm /p/a/t/h 2> /dev/null
Observe que o segundo comando falhará (retornará um status de saída diferente de zero) se o arquivo não existir, mas o primeiro será bem-sucedido devido à opção -f
(abreviação de --force
). Dependendo da situação, esse pode ser um detalhe importante.
Mas o mais provável é que, se você estiver anexando ao arquivo, é porque seu script está usando >>
para redirecionar algo para o arquivo. Apenas substitua >>
por >
. É difícil dizer, pois você não forneceu nenhum código.
Observe que você pode fazer algo assim test -f /p/a/t/h && rm /p/a/t/h
, mas fazê-lo é completamente inútil. É bem possível que o teste retorne verdadeiro, mas o / p / a / t / h deixará de existir antes de tentar removê-lo, ou pior, o teste falhará e o / p / a / t / h será criado antes de executar o próximo comando que espera que ele não exista. Tentar fazer isso é uma condição clássica de corrida. Não faça isso.
rm /p/a/t/h 2> /dev/null
não manterá o código de retorno ( echo $?
) como 0 se o arquivo não existir. Isso faria com que os trabalhos de Jenkins falhassem apenas porque tentamos excluir um arquivo inexistente.
noclobber
no bash) ou talvez modifique o arquivo existente para que o redirecionamento falhe se o arquivo existir (não evita a condição de corrida), mas tudo o que fará é tornar os bugs mais sutis.
Outro comando de uma linha que usei é:
[ -e file ] && rm file
Você pode usar isto:
#!/bin/bash
file="file_you_want_to_delete"
if [ -f $file ] ; then
rm $file
fi
echo $?
não dê 1 se o arquivo não existir.
Se você deseja ignorar a etapa para verificar se o arquivo existe ou não, é possível usar um comando bastante fácil, que excluirá o arquivo se existir e não emitirá um erro se ele não existir.
rm -f xyz.csv
-f
argumento, não haveria erro. Esta resposta me ajudou, obrigado.
Algo assim funcionaria
#!/bin/sh
if [ -fe FILE ]
then
rm FILE
fi
-f verifica se é um arquivo comum
-e verifica se o arquivo existe
Introdução ao if para obter mais informações
EDIT: -e usado com -f é redundante, fo usando -f sozinho deve funcionar também
-a
está obsoleto, use em -e
vez disso.
-f
.
-e
em -fe
é redundante, como -f
também verifica a existência do arquivo, tanto quanto eu sei ..
if [ $( ls <file> ) ]; then rm <file>; fi
Além disso, se você redirecionar sua saída com, em >
vez >>
dela, substituirá o arquivo anterior
file
é algo como5 -lt 2
rm $my_file
, certo? Qual shell você está usando?