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.
-ls
veya 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 ls
argümanlar ekleyebilirsiniz . Bir ekleyin --color=always
ve dircolors geri almak veya -a
gizli 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, ls
genellikle alır diğer seçenekleri kullanabilirsiniz . Veya ... -v
sadece 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;done
testlerimde yaklaşık 3 kat daha hızlı
Ben find
ikili desteklemediği bir sistemdeydim -not
ve 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