Dosyaları ls ile türe göre nasıl listeleyebilirim?


20

lsKomutu seçenekle birlikte kullandığımda, -lilk harf dizesi her dosya hakkında bilgi verir ve bu dizedeki ilk harf dosyanın türünü verir. ( d= dizin, -= standart dosya, l= bağlantı vb.)

Dosyaları ilk harfe göre nasıl filtreleyebilirim?


2
İstediğinizi düşünün: superuser.com/a/109542
devnull

Yanıtlar:


9

Dizinler dışındaki her şeyi grepşu şekilde filtreleyebilirsiniz :

ls -l | grep '^d'

^Desen satırın başında olduğunu gösterir. Değiştir dile -, lhangisi uygunsa, vb.

Elbette belirli türleri doğrudan aramak için diğer komutları kullanabilirsiniz (örneğin find . -maxdepth 1 -type d) veya ls -l | sortbu ilk karaktere göre benzer türleri birlikte gruplamak için kullanabilirsiniz , ancak filtrelemek istiyorsanız grep, çıktıdan yalnızca uygun satırları seçmek için kullanmalısınız .


Simgeler varsa kullanmak isteyebileceğinizi unutmayın ls -lL. -Lbir dizine mi yoksa bir dosyaya mı bağlı olduğunu göstermek için simgeleri takip eder.
Nux

8

Tüm çıktıyı görüntülemek istiyorsanız, ancak benzer türde dosyalar birlikte listelenmişse, çıktıyı her satırın ilk karakterine göre sıralayabilirsiniz:

ls -l | sort -k1,1

Downvote için herhangi bir neden var mı?
Joseph R.

1
Muhtemelen bir metin işleme rutini kullanması nedeniyle, düz metin manipülasyonu, belirli geliştiriciler (meslektaşlarımın çoğu gibi) arasında "soğuk" veya "yanlış" olarak algılanmaktadır . Basit ve doğru bir cevap için bir oy verin.
Mark K Cowan

8

Komut ls, dizin veri yapılarına kaydedilen dosya adları ile ilgilidir . Bu nedenle, bir dosyanın "türü" de dahil olmak üzere dosyanın kendisini gerçekten önemsemez.

Yalnızca adları değil , gerçek dosyalar üzerinde çalışmaya daha uygun bir komuttur find. Dosya türündeki listenin nasıl filtreleneceğine ilişkin sorunuzu doğrudan yanıtlayan bir seçenek vardır.

Bu, geçerli dizinin aşağıdakilere benzer bir listesini verir ls -l:

find . -maxdepth 1 -ls

Varsayılan olarak, find1 olarak arama derinliğini sınırlayarak devre dışı yinelemeli listeleri dizinleri,
Dışarı bırakabilir .ama dizinleri seçeneklerden önce listelenmesi gerekir göstermek için dahil.

İle -type, düz dosyalar veya dizinler olarak fveya olarak ifade edilen dosya türüne göre filtreleyebilirsiniz d:

find . -maxdepth 1 -type d -ls

-typeÖzellikle lsembolik bağlantılar için başka filtre değerleri vardır . Symlink'lerle
ilgili bir komplikasyon olduğunu unutmayın :
Bu durumda iki tür dosya vardır: lbir sembolik bağlantıyı ve benzeri bir şey f, bağlanan dosyanın türünü gösterir. Bunu nasıl ele alacağınızı belirtmek için seçenekler vardır, böylece seçebilirsiniz.


Gönderen man find:

    -type c
           File is of type c:

           b      block (buffered) special

           c      character (unbuffered) special

           d      directory

           p      named pipe (FIFO)

           f      regular file

           l      symbolic link; this is never true if the  -L  option
                  or  the -follow option is in effect, unless the sym‐
                  bolic link is broken.  If you  want  to  search  for
                  symbolic links when -L is in effect, use -xtype.

           s      socket

           D      door (Solaris)

ve sembolik bağlantıların kullanımı ile ilgili:

    -xtype c
           The  same as -type unless the file is a symbolic link.  For
           symbolic links: if the -H or -P option was specified,  true
           if the file is a link to a file of type c; if the -L option
           has been given, true if c is `l'.  In other words, for sym‐
           bolic  links, -xtype checks the type of the file that -type
           does not check.

ve

    -P     Never follow symbolic links.  This is  the  default  behav‐
           iour.  When find examines or prints information a file, and
           the file is a symbolic link, the information used shall  be
           taken from the properties of the symbolic link itself.


    -L     Follow symbolic links.  When find examines or prints infor‐
           mation about files, the information  used  shall  be  taken
           from  the  properties of the file to which the link points,
           not from the link itself (unless it is  a  broken  symbolic
           link  or  find  is  unable to examine the file to which the
           link points).  Use of this option implies -noleaf.  If  you
           later  use  the -P option, -noleaf will still be in effect.
           If -L is in effect and find discovers a symbolic link to  a
           subdirectory during its search, the subdirectory pointed to
           by the symbolic link will be searched.

           When the -L option is in effect, the -type  predicate  will
           always  match  against the type of the file that a symbolic
           link points to rather than the link itself (unless the sym‐
           bolic  link  is  broken).   Using  -L causes the -lname and
           -ilname predicates always to return false.


    -H     Do not follow symbolic links, except while  processing  the
           command  line  arguments. [...]

2

Klasörleri diğer dosya türlerinden sipariş etme konusunda endişeleriniz varsa,

ls --group-directories-first

başka, bence Anthon tarafından cevaplandığı gibi ls -l'den sıralama veya grep yoluyla çıkış yapmalısınız


2
ls -l | awk '/^d/{print $NF}

awk d ile başlayan her şeyi yakalar. d dizin içindir ve dizin adını listelemek için son alanı yazdırmanız gerekir


1
ls -l | sort 

Bu, sonucu her sonucun alfabetik sırasına göre sıralar. İlk karakter istediğiniz ölçütse, hepsi bu. Dosya adlarına ihtiyacınız varsa yalnızca deneyebilirsiniz:

ls -l | sort | cut -f 2 -d ' ' 

Ya da benzer bir şey (bu komut boşluk sınırlayıcıyı kullanarak her satırı sıralar ve böler, sonra ikinci grubu döndürür.


düzenleme Tico için teşekkürler, telefonda ne yazdığınızı görmek zor.
Fabio
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.