ls -l --grup-dizinleri-ilk (semboliklere de etki eder)


9

lsseçeneği --group-directories-first, dizinlerin en üstte listelenmesine neden olur, bu da lsgüzel ve temiz çıktı sağlar :

ls -l --group-directories-first

Ancak, symlinksaslında symlinksdizinler için geçerli değildir . Kullanmak için bir olasılık var

ls -l -L --group-directories-first

her iki tür dizini de listeleyecek, ancak uygun dizin ile işaretlenmiş dizin arasında ayrım yapamayacak.

Can lshala düzenli dizinleri ayrı tutarken, üstte sembolik olarak dizinleri görüntüler?

EDIT: kullanıyorum bash.


Bu bir parçası olan kendine özgü davranıştır ls. Göre stat()sistem çağrısı, bir dizine sembolik bağ bir dizin (hala S_ISDIR(st_mode)gerçek dönecektir). Belli oluyordu lssembolik azalttı önce bu denetler.
goldilocks

2
@goldilocks, hayır lsyapar lstat()(ve readlinkkullandığınız sürece sembolik bağlar için) -Lseçeneğini (bu durumda kullandığı stat())
Stéphane Chazelas

@StephaneChazelas: Hmm, yaşa ve öğren. Ben de bunun S_ISLNK(st_mode)doğru döndüğünü düşünmüştüm stat(), ama öyle değil - sadece böyle yapıyor lstat(). Ayrıca, bağlantı bir bağlantıya bağlantı olsa bile ISLNK, stat aracılığıyla true değerini döndürmez. Bu ISLNKtür belirtilmemiş olmasına rağmen, asla stat aracılığıyla doğru döndürmeyecek anlamına gelir ...
goldilocks

@goldilocks, sembolik bağların statsonunda dosyanın özelliklerini verir. Bu yoksa veya erişilemezse, statbir ENOENT döndürür, bu nedenle döndürülen şey statasla bir sembolik bağlantı olmayacaktır. stat()sembolik bağlantılar hakkında size hiçbir zaman bir şey söylemeyecektir, tıpkı opensembolik bağlantıyı asla açmayacak veya chmod()bir sembolik
resmin

Yanıtlar:


5

Hayır, ancak kullanıyorsanız zshşunları yapabilirsiniz:

mll() {
  (($#)) || set -- *(N-/) *(N^-/)
  (($#)) && ls -ldU -- $@
}

Ayrıca aşağıdaki gibi bir sıralama düzeni tanımlayabilirsiniz:

dir1st() { [[ -d $REPLY ]] && REPLY=1-$REPLY || REPLY=2-$REPLY;}

ve şöyle kullanın:

ls -ldU -- *(o+dir1st)

Bu şekilde, farklı seçeneklerden lsveya bunlardan başka komutlar lsiçin veya aşağıdaki gibi farklı kalıplar için kullanabilirsiniz:

ls -ldU -- .*(o+dir1st) # to list the hidden files and dirs

veya:

ls -ldU -- ^*[[:lower:]]*(o+dir1st) # to list the all-uppercase files and dirs

Kullanmanız gerekiyorsa bash, eşdeğer şuna benzer:

mll() (
  if (($# == 0)); then
    dirs=() others=()
    shopt -s nullglob
    for f in *; do
      if [[ -d $f ]]; then
        dirs+=("$f")
      else
        others+=("$f")
      fi
    done
    set -- "${dirs[@]}" "${others[@]}"
  fi
  (($#)) && exec ls -ldU -- "$@"
)

bashglobbing niteleyicileri veya globların sıralama düzenini etkilemenin herhangi bir yolu yoktur veya nullglob'u glob bazında çevirmek için herhangi bir yol yoktur veya seçenekler için yerel bağlamı yoktur (bu nedenle yukarıdaki ()yerine bir alt kabuk başlatmak dışında {}) AFAIK .


1
Benzer bir hile var mı bash?
Martin Vegter
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.