SORU
30 Mayıs 2010, Pazar


Herhangi bir topak olup olmadığını Test bash maçlar

Eğer tek bir dosya varlığı için kontrol etmek isterseniz, test -e filename [ -e filename ] kullanarak test edebilirsiniz.

Bir topak var diyelim ve topak eşleşen herhangi bir dosyanın var olup olmadığını bilmek istiyorum. Bu kısım 1 veya daha fazla dosya, bu durumda bir şeyler yapmak istiyorum () eşleştirebilirsiniz 0 dosyaları bu durumda bir şey yapmak istiyorum (), ya da maç olabilir. Nasıl bir topak maçlar vardır herhangi bir olup olmadığını test edebilirim? (Çok var maçlar nasıl olduğu umurumda değil, ve eğer if deyim ve döngüler sadece en okunabilir buluyorum, çünkü bu yapabileceğim en iyisi olacaktır.

(test -e glob* eğer kısım birden fazla dosya eşleşirse başarısız olur.)

CEVAP
24 Kasım 2010, ÇARŞAMBA


Nullglob kabuk seçeneği gerçekten bir bashism.

Sıkıcı bir kaydetmek için ihtiyaç önlemek ve nullglob devletin geri yüklemek için, sadece bu kısım ... ... genişleyen kabuk içinde bırakacağım:

if test -n "$(shopt -s nullglob; echo glob*)"
then
    echo found
else
    echo not found
fi

Daha iyi taşınabilirlik için ve daha esnek bir genelleme kullanın

if test -n "$(find . -maxdepth 1 -name 'glob*' -print -quit)"
then
    echo found
else
    echo not found
fi

Açık-baskı -çıkıneylemler için kullanılırbulabilirsinizyerine varsayılan örtülü-yazdırıneylembulabilirsinizilk dosya arama kriterleri eşleşen bulur bulmaz çıkılacak. Burada bir sürü dosya maçı, bu çalıştıracağını çok daha hızlı echo glob* ls glob* da önler olasılığı overstuffing genişletilmiş komut satırı (kabuk var 4K uzunluğu sınırı).

Eğerbulabilirsinizoverkill gibi hissediyor ve dosyaları eşleştirmek için olası sayısı küçük, stat

if stat -t glob* >/dev/null 2>&1
then
    echo found
else
    echo not found
fi

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • David Tedeyev

    David Tedeye

    20 AĞUSTOS 2011
  • dope2111

    dope2111

    29 HAZİRAN 2009
  • RobertDuskin

    RobertDuskin

    12 HAZİRAN 2008