Yanıtlar:
Dosyanın var olup olmadığını kontrol etmekten çekinmeyin, kaldırmaya çalışın.
rm -f /p/a/t/h
# or
rm /p/a/t/h 2> /dev/null
Dosya yoksa ikinci komutun başarısız olacağını (sıfır olmayan bir çıkış durumu döndürün), ancak ilk komutun -f(kısa için --force) seçeneği sayesinde başarılı olacağını unutmayın . Duruma bağlı olarak, bu önemli bir ayrıntı olabilir.
Ancak büyük olasılıkla, dosyaya ekliyorsanız, bunun nedeni komut >>dosyanızın dosyaya bir şey yönlendirmek için kullanılmasıdır . Sadece yerini >>ile >. Kod sağlamadığınız için söylemek zor.
Bunun gibi bir şey yapabileceğinizi unutmayın test -f /p/a/t/h && rm /p/a/t/h, ancak bunu yapmak tamamen anlamsızdır. Testin doğru dönmesi olasıdır, ancak kaldırmaya çalışmadan önce / p / a / t / h mevcut olmaz veya daha kötüsü test başarısız olur ve / p / a / t / h oluşturulur varolan bir sonraki komutu yürütmeden önce. Bunu denemek klasik bir yarış koşulu. Yapma.
rm /p/a/t/h 2> /dev/nullecho $?dosya yoksa dönüş kodunu ( ) 0 olarak tutmaz. Bu, varolmayan bir dosyayı silmeye çalıştığımız için Jenkins'in bir tür işlerin başarısız olmasına neden olur.
noclobberbash gibi ) deneyebilir veya mevcut dosyayı yeniden yönlendirebilirsiniz, böylece dosya varsa yönlendirme başarısız olur (yarış koşulundan kaçınmaz), ama tek yapacağım böcekleri daha incelikli yapmak.
Kullandığım başka bir satır komutu:
[ -e file ] && rm file
Bunu kullanabilirsiniz:
#!/bin/bash
file="file_you_want_to_delete"
if [ -f $file ] ; then
rm $file
fi
echo $?dosya yoksa 1 vermez.
Dosyanın var olup olmadığını kontrol etme adımını göz ardı etmek istiyorsanız, oldukça kolay bir komut kullanabilirsiniz; bu, eğer varsa dosyayı siler ve mevcut değilse bir hata atmaz.
rm -f xyz.csv
-fbir hata atmayacağını açıklamıyordu. Bu cevap bana yardımcı oldu, teşekkürler.
Böyle bir şey işe yarayabilir
#!/bin/sh
if [ -fe FILE ]
then
rm FILE
fi
-f normal bir dosya olup olmadığını kontrol eder
-e dosyanın var olup olmadığını kontrol eder
Daha fazla bilgi için if'a giriş
EDIT: -e ile kullanılan -f gereksizdir, -f tek başına kullanıldığında da çalışmalı
-akullanımdan kaldırılmışsa -ebunun yerine kullanın.
-f.
-ede -fe, gereksiz olduğunu, aynı -fzamanda bildiğim kadarıyla dosyanın varlığını kontrol eder ..
if [ $( ls <file> ) ]; then rm <file>; fi
Ayrıca, çıktınızı >bunun yerine yeniden yönlendirirseniz >>önceki dosyanın üzerine yazılır
file bir şey5 -lt 2
rm $my_file, değil mi? Hangi kabuğu kullanıyorsun?