Как проще всего удалить & ldquo; total < size > & rdquo; строка из вывода ls -l?

Лучшее, что я смог найти через Google / man ls, было:

ls -l | grep -v '^total'

Есть ли что-то, что я пропускаю во флагах ls?

Также Почему общий размер в килобайтах, независимо от флага -h? нуля, который, кажется, так и есть, не уверен, что я тогда видел.

14
задан 18 September 2011 в 13:57

4 ответа

Просматривая исходный код coreutils, я обнаружил, что total всегда будет отображаться при использовании опции -l в каталогах .

Использование опции -d для перечисления записей вместо содержимого каталога скрывает total. Но если вы запустите это без аргументов (или для каталога), он просто покажет каталог, а не его содержимое. Поэтому вам нужны подстановочные знаки. * сопоставляет все файлы, а .* также сопоставляет скрытые файлы (что соответствует опции -a):

ls -ld * .*

Что касается опции -h, она работает для меня. 1118360 байт отображаются как 1.1M. Файлы размером менее 1024 отображаются в байтах.

0
ответ дан 18 September 2011 в 13:57

Использование символов подстановки, чтобы избежать запуска 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.

0
ответ дан 18 September 2011 в 13:57

ls -l *

Даст вам «нормально названное» содержимое папки без total. Это может подойти для ваших нужд. К сожалению, он не даст вам префиксные файлы dot. Если вы используете ls -l * .*, вы получите беспорядок, так как Linux будет перемещаться вверх по дереву.

Обратите внимание, что префикс точки может означать папку или подстановочный знак означает вышеуказанную папку, поэтому он не поможет вам выбрать обычные файлы с префиксом точки. Похоже, это было неудачное дизайнерское решение.

0
ответ дан 18 September 2011 в 13:57

$ ls -l [DIRECTORY] | sed 1d
(выходные данные содержат имена файлов)

$ ls -ld [path-to-dir]/*
(выходные данные содержат относительные пути, но сохранят цвета)

[ 1110] $ ls -l [DIRECTORY] | tail -n +2

$ ls -l [DIRECTORY] | awk 'NR>=1'


Примечание:
Следующее не работает, если у вас есть файл с именем "total ...."

$ ls -l | grep -v '^total'

0
ответ дан 18 September 2011 в 13:57

Другие вопросы по тегам:

Похожие вопросы: