Geçerli dizindeki dosyaları listelerken dizinleri nasıl hariç tutarım?
ls .
^ listede dizinleri içerecektir.
Geçerli dizindeki dosyaları listelerken dizinleri nasıl hariç tutarım?
ls .
^ listede dizinleri içerecektir.
Yanıtlar:
Bunu dene:
find . -maxdepth 1 -not -type d
ls .dizinler olmadan eşdeğer istedi - ve işte burada.
-lsveya dizinler olmadan -exec ls -l {} \;gibi yapar ls -l.
Tam olarak eşdeğer olmasını ls .sağlamak için gizli dizinleri göstermemelisiniz.
find . -maxdepth 1 -not -type d -and -not -name '.*'
ve bu hala her dosya adına önek olarak "./" işareti bırakır. Bu gerçekten bir sorun değil, ama sanırım biraz çirkin. İle gittim:
ls -p | grep -v '/$'
Bu size aynı görünen bir liste sunar ve siz de ek lsargümanlar ekleyebilirsiniz . Bir ekleyin --color=alwaysve dircolors geri almak veya -agizli dosyaları görmek için.
Alexander'ın cevabını seviyorum çünkü aslında söz konusu dosyanın karakteristik bir dosya sistemi özelliğine bağlı, bu yüzden hiç kandırılmayacak. Cevabım, adındaki son karakter olarak '/' olan bir dosya tarafından aldatılacak. Ama sanki sorun istiyor.
Eski bir yazı olmasına rağmen, bunun yardımcı olabileceğini düşündüm.
$ ls -l | grep -v ^ d
Semboller, karakter ve blok dosyaları dahil tüm dosyaları listeler.
Yukarıdaki "find" çözümleri ls bazı yeteneklerini kaybeder - örneğin: sadece azalan değiştirme süresine göre sıralanmış dosyaları listeler.
"Ls -p | grep" cevapları istenirse -R gibi diğer ls unsurlarıyla zarif bir şekilde ilgilenmez.
Aşağıdaki cevap, daha ayrıntılı olsa da, bence en gerçek ls davranışını ve "yalnızca dosyaları" seçmek için en esnekliği yansıtır
ls -t . | while read line; do
if [ -f $line ]; then
echo $line
fi
done
Basitçe ls anahtarlarını istediğiniz gibi değiştirin; sonuç yalnızca dosyalarla döndürülecektir. Bağlantılar ve diğer öğeler de gerekliyse, dahil edilmek üzere test için küçük yeniden çalışmaların yapılması gerekecektir.
ls $(file --no-pad -F' ' * | grep -v directory | cut -d' ' -f1)
Bununla, lsgenellikle alır diğer seçenekleri kullanabilirsiniz . Veya ... -vsadece dizinleri listelemek için kaldırın . Veya ... dizini file, ASCII, boş, ELF vb. Gibi anlayan ve bildiren diğer dosya türleriyle değiştirin .
ls -t .|while read f;do [ -f "$f" ]&& echo $f;donetestlerimde yaklaşık 3 kat daha hızlı
Ben findikili desteklemediği bir sistemdeydim -notve kullanarak sona erdi:
ls|while read f;do [ -f "$f" ]&& echo $f;done
Avantajları: sh ls echo
Bash ve tire ile uyumlu başka hiçbir şeye güvenmez
Başka şeylerle (dizinler gibi) değiştirilerek değiştirilebilir -f
Bazı cevaplardan daha hızlıdır ve daha az RAM ve CPU kullanır