Risposte:
Non preoccuparti di controllare se il file esiste, prova solo a rimuoverlo.
rm -f /p/a/t/h
# or
rm /p/a/t/h 2> /dev/null
Si noti che il secondo comando fallirà (restituirà uno stato di uscita diverso da zero) se il file non esistesse, ma il primo avrà esito positivo grazie all'opzione -f(abbreviazione di --force). A seconda della situazione, questo può essere un dettaglio importante.
Ma più probabilmente, se stai aggiungendo al file è perché lo script sta usando >>per reindirizzare qualcosa nel file. Sostituisci >>con >. È difficile da dire poiché non hai fornito alcun codice.
Nota che puoi fare qualcosa del genere test -f /p/a/t/h && rm /p/a/t/h, ma farlo è completamente inutile. È possibile che il test ritorni vero ma il / p / a / t / h non esisterà prima di provare a rimuoverlo, o peggio il test fallirà e verrà creato il / p / a / t / h prima di eseguire il comando successivo che prevede che non esista. Tentare questa è una condizione di gara classica. Non farlo
rm /p/a/t/h 2> /dev/nullnon manterrà il codice di ritorno ( echo $?) come 0 se il file non esistesse. Ciò renderebbe i lavori di Jenkins falliti solo perché abbiamo tentato di eliminare un file inesistente.
noclobberin bash), o magari modificare il file esistente in modo che il reindirizzamento fallisca se il file esiste (non evita le condizioni della gara), ma tutto ciò che farà è rendere i bug più sottili.
Un altro comando a una riga che ho usato è:
[ -e file ] && rm file
Puoi usare questo:
#!/bin/bash
file="file_you_want_to_delete"
if [ -f $file ] ; then
rm $file
fi
echo $?non dia 1 se il file non esiste.
Se si desidera ignorare il passaggio per verificare se il file esiste o meno, è possibile utilizzare un comando abbastanza semplice, che eliminerà il file se esiste e non genererà un errore se non esiste.
rm -f xyz.csv
-fesso non avrebbe generato un errore. Questa risposta mi ha aiutato, grazie.
Qualcosa del genere avrebbe funzionato
#!/bin/sh
if [ -fe FILE ]
then
rm FILE
fi
-f controlla se è un file normale
-e controlla se il file esiste
Introduzione a if per ulteriori informazioni
EDIT: -e usato con -f è ridondante, anche usando -f da solo dovrebbe funzionare
-aè deprecato, utilizzare -einvece.
-f.
-ein -feè ridondante, poiché -fcontrolla anche l'esistenza del file per quanto ne so ..
if [ $( ls <file> ) ]; then rm <file>; fi
Inoltre, se si reindirizza l'output con >invece di >>esso sovrascriverà il file precedente
fileè qualcosa del genere5 -lt 2
rm $my_file, giusto? Che shell stai usando?