Özyinelemesiz ls


19

Bir dizinde bir desen ile bazı dosyaları ls çalışıyorum. Ben sadece ilk seviyeyi taramak istiyorum özyinelemeli değil.

Senaryom:

for i in $(ls $INCOMINGDIR/*$BUSSINESSDATE*)
do
  echo $i;
done

Yukarıdaki komut tekrar tekrar tarama. Sadece birinci seviye dizini taramak nasıl yapılır?


printf %s\\n "$INCOMINGDIR/"*"$BUSINESSDATE"*
mikeserv

Yanıtlar:


39

Ayrıştırmals . Ayrıca ALL_CAPS_VARS kullanma

for i in "$incoming_dir"/*"$business_date"*; do

Etkileşimli olarak, alt dizinlere inmeyi önleyen lsbir -dseçenek vardır:

ls -d $INCOMINGDIR/*$BUSSINESSDATE*

Bilgi için teşekkürler, şimdi sadece sistem yöneticilerini rahatsız etmek için adında yeni satırlarla dosya oluşturmaya başlayacağım.
Petah

Bu yüzden akıllı sysadmin / programcı kullanır "${i}". Ne olabileceğini asla bilemezsin i.
Ricky Beam

@Petah: veya kötü niyetli bir dosya adlı bir dosya oluşturabilir my_file.doc[newline]another_persons_file.docve bazı komut dosyalarının 2 dosya adı olarak gördüklerini "rm" denemesini umabilir ... Glenn'in bağlantısı mutlaka okunmalıdır (mywiki.wooledge.org'da herkes okumalı bütün sss ve aynı zamanda tuzaklar sayfası)
Olivier Dulac

1
güzel. -d seçeneğini bilmiyordum!
dokaspar

Harika! Bu daha basit şeyler için de geçerlidir. Gibi tüm nokta önekli dosyaları ls -d .*
listeleme

8

Bu komutun özyinelemeli olması için hiçbir neden yoktur. Ancak $INCOMINGDIR/*$BUSSINESSDATE*bir dizinle eşleşirse, dizinin kendisi yerine bu dizinin içeriği gösterilir. Ancak bu seviyenin ötesinde bir özyineleme olmazdı.

Bu etkiyi önlemek için bu komutu kullanın:

ls -d "$INCOMINGDIR/"*"$BUSSINESSDATE"*

for ... inlsçıkışlı komutlar risklidir.

Genel olarak finddaha iyi bir çözüm gibi görünüyor veya

for i in "$INCOMINGDIR/"*"$BUSSINESSDATE"*
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.