2016-03-25 21 views
0

Sonuçları filtrelemek için ls -alis kullanarak ve awk kullanarak bir klasör içeriği listesi oluşturduk.awk ile klasörü dışlama düzgün çalışmıyor

$11 != "." && $11 != ".." ile ilgili bazı sorunlar yaşıyorum. . klasörünü ve .. klasörünü görüntülemek istemiyorum ama hala buradalar.

ls --color -alis /home/user/ | 
tr -s ' ' | cut -d " " -f11 | 
awk '$1 !~"^/\./$" { print $1 }' 

$11 !~ "^/./$" da denedim.

+1

Sorundan kaçınmak için, *. * Ve '..' dışındaki * dot karakterlerini içeren -A (büyük harf) kullanabilirsiniz. –

cevap

0

Parsing output of ls is not recommended dosya adları beyaz boşluklu yeni satırlara vb. Sahip olabilir ve piped komutlarınızı kesecektir.

İhtiyaçlarınız için sadece kullanabileceğiniz bu printfxargs ile:

printf "%s\0" * | xargs -0 ls --color -Alis 
+1

Normalde, harflerle başlayan dosyaları, muhtemelen, '-a' kullanma amacını taşıyan dosyaları hariç tutar, ancak bazı kabukların bunları içermesi için farklı seçenekler vardır. –

+0

Çok iyi nokta, teşekkürler @ dave_thompson_085. Kullanmaya katılıyorum '-A' OP ihtiyacını karşılamak için daha iyi olurdu. – anubhava

0

alıntı regex ve bağlantı noktalarını (^ ve $) regex içeri çift etmeyin:

awk '$11 !~ /^\.\.?$/ { print }' 

Bu, alan 11'in bir veya iki nokta içerdiği (yalnızca) bir çizgi ile uyuşmuyor.

Bu, awk betiği ile ilgili sorunları ele alır; Ancak, belirsiz olabileceğinden, ls çıktısını ayrıştırmanız gerekip gerekmediği tartışmalıdır.