lsОпція --group-directories-firstпризводить до того, що каталоги будуть вказані у верхній частині, що робить результат lsвигідним і чистим:
ls -l --group-directories-first
Однак він не діє на те symlinks, що є насправді symlinksдо каталогів. Є можливість використовувати
ls -l -L --group-directories-first
який буде перераховувати обидва типи каталогів зверху, але не буде розрізняти належну директорію та каталог, що зв'язаний посиланням, що знову заплутано.
Чи можна lsвідображати каталоги, що мають посилання, зверху, зберігаючи їх на відміну від звичайних каталогів?
EDIT:
Я використовую bash.
lsне lstat()(і readlinkдля посилань), якщо ви не скористаєтесь -Lопцією (у цьому випадку вона використовується stat())
S_ISLNK(st_mode)також повертається істина через stat(), але це не так - це робиться тільки через lstat(). Також ISLNK не повертає істину через stat, навіть якщо посилання є посиланням на посилання. Означає, що ISLNKніколи не повернеться істиною через stat, хоча це не визначено ...
statдає вам властивості файлу в кінці символьних посилань. Якщо цього не існує або він недоступний, він statповертає ENOENT, тому те, що повертається, statніколи не буде символьним посиланням. stat()ніколи не розкаже вам нічого про посилання, як openніколи не відкриє символьне посилання, або chmod()не змінить дозволу символьної посилання ... тощо.
ls. Відповідно доstat()системного виклику, символьне посилання на каталог все ще є каталогом (S_ISDIR(st_mode)повернеться істинним). Доказовоlsзнижує символьні посилання перед тим, як перевірити це.