lsопция --group-directories-firstзаставляет каталоги быть перечисленными сверху, что делает вывод lsкрасивым и чистым:
ls -l --group-directories-first
Тем не менее, это не действует symlinks, которые на самом деле относятся symlinksк каталогам. Есть возможность использовать
ls -l -L --group-directories-first
который перечислит оба вида каталогов сверху, но не будет различать надлежащий каталог и каталог с символическими ссылками, что опять-таки сбивает с толку.
Можно ли lsотображать каталоги с символическими ссылками сверху, при этом отличая их от обычных каталогов?
РЕДАКТИРОВАТЬ:
я использую bash.
lsделает lstat()(и readlinkдля символических ссылок), если вы не используете -Lопцию (в этом случае она использует stat())
S_ISLNK(st_mode)также вернул истину через stat(), но это не так - он делает это только через lstat(). Также, что ISLNK не возвращает true через stat, даже если ссылка является ссылкой на ссылку. Это означает, что ISLNKэто никогда не вернет истину через стат, хотя это не определено ...
statдает вам свойства файла в конце символической ссылки. Если это не существует или недоступно, statвозвращается ENOENT, поэтому то, что возвращается, statникогда не будет символической ссылкой. stat()никогда не скажет вам ничего о символических ссылках, точно так же, как openникогда не откроет символическую ссылку, или chmod()не изменит разрешения символической ссылки ... и т. д.
ls. Согласноstat()системному вызову, символическая ссылка на каталог все еще является каталогом (S_ISDIR(st_mode)вернет true). Доказывает,lsчто символические ссылки, прежде чем он это проверяет.