ls
opcja --group-directories-first
powoduje, że katalogi są wyświetlane na górze, co sprawia, że wyjście jest ls
ładne i czyste:
ls -l --group-directories-first
Jednak to nie działa na symlinks
, które są faktycznie symlinks
do katalogów. Istnieje możliwość użycia
ls -l -L --group-directories-first
który wyświetli listę obu rodzajów katalogów na górze, ale nie rozróżni właściwego katalogu i katalogu z dowiązaniem symbolicznym, co znów jest mylące.
Czy ls
na górze mogą wyświetlać się dowiązane katalogi, a jednocześnie odróżniać je od zwykłych katalogów?
EDYCJA:
Używam bash
.
ls
nie lstat()
(i readlink
dla dowiązań symbolicznych), chyba że skorzystasz z -L
opcji (w którym to przypadku używa stat()
)
S_ISLNK(st_mode)
również zwróciło prawda przez stat()
, ale tak nie jest - robi to tylko przez lstat()
. Również, że ISLNK nie zwraca true przez stat, nawet jeśli link jest linkiem do linku. Oznacza to, że ISLNK
może nigdy nie zwróci prawdy poprzez statystyki, chociaż jest to rodzaj nieokreślonego ...
stat
daje właściwości pliku na końcu dowiązań symbolicznych. Jeśli to nie istnieje lub jest niedostępne, stat
zwraca ENOENT, więc to, co zostanie zwrócone stat
, nigdy nie będzie dowiązaniem symbolicznym. stat()
nigdy nie powie ci nic na temat dowiązań symbolicznych, tak jak open
nigdy nie otworzy dowiązań symbolicznych, ani chmod()
nie zmieni uprawnień dowiązań symbolicznych ... itd.
ls
. Zgodnie zstat()
wywołaniem systemowym dowiązanie symboliczne do katalogu jest nadal katalogiem (S_ISDIR(st_mode)
zwróci wartość true). Wyraźnie pomija łączals
symboliczne, zanim to sprawdzi.