Je travaille sur des trucs où je stocke des données dans un fichier. Mais chaque fois que j'exécute le script, il est ajouté au fichier précédent.
Je souhaite obtenir de l'aide sur la façon de supprimer le fichier s'il existe déjà.
Réponses:
Ne vous inquiétez pas de vérifier si le fichier existe, essayez simplement de le supprimer.
rm -f /p/a/t/h
# or
rm /p/a/t/h 2> /dev/null
Notez que la deuxième commande échouera (retourne un état de sortie différent de zéro) si le fichier n'existait pas, mais la première réussira grâce à l' option -f
(abréviation de --force
). Selon la situation, cela peut être un détail important.
Mais plus probablement, si vous ajoutez au fichier, c'est parce que votre script utilise >>
pour rediriger quelque chose dans le fichier. Remplacez simplement >>
par >
. C'est difficile à dire puisque vous n'avez fourni aucun code.
Notez que vous pouvez faire quelque chose comme test -f /p/a/t/h && rm /p/a/t/h
, mais cela est complètement inutile. Il est tout à fait possible que le test retourne vrai mais le / p / a / t / h échouera avant que vous essayiez de le supprimer, ou pire le test échouera et le / p / a / t / h sera créé avant d'exécuter la commande suivante qui s'attend à ce qu'elle n'existe pas. Tenter ceci est une condition de course classique. Ne fais pas ça.
rm /p/a/t/h 2> /dev/null
ne conservera pas le code de retour ( echo $?
) à 0 si le fichier n'existait pas. Cela ferait échouer les tâches Jenkins simplement parce que nous avons essayé de supprimer un fichier inexistant.
noclobber
dans bash), ou peut-être modifier le fichier existant pour que la redirection échoue si le fichier existe (n'évite pas la condition de concurrence), mais tout ce que cela fera est de rendre les bogues plus subtils.
Une autre commande d'une ligne que j'ai utilisée est:
[ -e file ] && rm file
Vous pouvez utiliser ceci:
#!/bin/bash
file="file_you_want_to_delete"
if [ -f $file ] ; then
rm $file
fi
echo $?
ne donne pas 1 si le fichier n'existe pas.
"$file"
?
Si vous voulez ignorer l'étape pour vérifier si le fichier existe ou non, vous pouvez utiliser une commande assez simple, qui supprimera le fichier s'il existe et ne lèvera pas d'erreur s'il est inexistant.
rm -f xyz.csv
-f
cela ne générerait pas d'erreur. Cette réponse m'a aidé, merci.
Quelque chose comme ça fonctionnerait
#!/bin/sh
if [ -fe FILE ]
then
rm FILE
fi
-f vérifie s'il s'agit d'un fichier normal
-e vérifie si le fichier existe
Introduction à if pour plus d'informations
EDIT: -e utilisé avec -f est redondant, fo utiliser -f seul devrait fonctionner aussi
-a
est obsolète, utilisez à la -e
place.
-f
.
-e
en -fe
est redondant, comme -f
vérifie également l'existence du fichier pour autant que je sais ..
if [ $( ls <file> ) ]; then rm <file>; fi
De plus, si vous redirigez votre sortie avec >
au lieu de >>
cela, il écrasera le fichier précédent
file
c'est quelque chose comme5 -lt 2
rm $my_file
, non? Quelle coque utilisez-vous?