Лучшее, что я смог найти через Google / man ls
, было:
ls -l | grep -v '^total'
Есть ли что-то, что я пропускаю во флагах ls
?
Также Почему общий размер в килобайтах, независимо от флага -h? del> нуля, который, кажется, так и есть, не уверен, что я тогда видел.
Просматривая исходный код coreutils
, я обнаружил, что total
всегда будет отображаться при использовании опции -l
в каталогах .
Использование опции -d
для перечисления записей вместо содержимого каталога скрывает total
. Но если вы запустите это без аргументов (или для каталога), он просто покажет каталог, а не его содержимое. Поэтому вам нужны подстановочные знаки. *
сопоставляет все файлы, а .*
также сопоставляет скрытые файлы (что соответствует опции -a
):
ls -ld * .*
Что касается опции -h
, она работает для меня. 1118360 байт отображаются как 1.1M. Файлы размером менее 1024 отображаются в байтах.
Использование символов подстановки, чтобы избежать запуска ls
списка каталогов, является неоптимальным, поскольку оно не позволяет использовать параметры ls
, такие как --almost-all
.
Как и предложение Энзотиба , самый простой способ удалить его - это пропустить его через tail
, чтобы отрубить первую строку. Однако ls
обнаружит, что его вывод является каналом, а не интерактивным, и изменит его значения по умолчанию нежелательным образом. Следовательно, чтобы сделать его более устойчивым, вы также должны добавить несколько опций:
--color=always
: продолжать показывать цвета --hide-control-chars
: печатать ?
в именах файлов вместо элементов управления символы, которые могут испортить вывод консоли У меня есть скрипт ~/bin/l
(вы также можете использовать псевдоним Bash в ~/.bash_aliases
):
#!/bin/bash
ls -l --color=always --hide-control-chars "$@" | tail --lines=+2
Вы также можете добавьте любые другие опции ls
, которые вы хотите по умолчанию, например, --group-directories-first --time-style='+%FT%T.%N%:::z' --indicator-style=slash
.
ls -l *
Даст вам «нормально названное» содержимое папки без total
. Это может подойти для ваших нужд. К сожалению, он не даст вам префиксные файлы dot
. Если вы используете ls -l * .*
, вы получите беспорядок, так как Linux будет перемещаться вверх по дереву.
Обратите внимание, что префикс точки может означать папку или подстановочный знак означает вышеуказанную папку, поэтому он не поможет вам выбрать обычные файлы с префиксом точки. Похоже, это было неудачное дизайнерское решение.
$ ls -l [DIRECTORY] | sed 1d
(выходные данные содержат имена файлов)[ 1110]
$ ls -ld [path-to-dir]/*
(выходные данные содержат относительные пути, но сохранят цвета)$ ls -l [DIRECTORY] | tail -n +2
blockquote>
$ ls -l [DIRECTORY] | awk 'NR>=1'
Примечание:
Следующее не работает, если у вас есть файл с именем "total ...."blockquote>
$ ls -l | grep -v '^total'