Каков самый простой способ удалить строку «общий размер» из вывода ls -l?

13

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

ls -l | grep -v '^total'

Есть ли что-то, что мне не хватает в флагах для ls ?

Кроме того, почему общий размер в kb, независимо от флага -h? , кажется, что он делает, не уверен, что я видел тогда.

    
задан Tom 13.09.2011 в 09:13
источник

4 ответа

9

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

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

ls -ld * .*

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

    
ответ дан Lekensteyn 13.09.2011 в 10:15
источник
6

Использование подстановочных знаков, чтобы избежать того, что ls работает со списком каталогов, является субоптимальным, поскольку он не позволяет вам использовать ls , такие как --almost-all .

Как предложение Enzotib , самый простой способ удалить его - передать его через tail , чтобы отрубить первую строку. Тем не менее, ls обнаружит, что его вывод является каналом, а не интерактивным, и изменяет его значения по умолчанию нежелательным образом. Следовательно, чтобы сделать его надежным, вы также должны добавить некоторые параметры:

  • --color=always : показывать цвета
  • --hide-control-chars : напечатать ? в именах файлов вместо управляющих символов, которые могут испортить вывод консоли.

У меня есть скрипт ~/bin/l (вы также можете использовать псевдоним Bash в ~/.bash_aliases ):

#!/bin/bash
ls -l --color=always --hide-control-chars "[email protected]" | tail --lines=+2

Вы также можете добавить любые другие опции ls , которые вы хотите по умолчанию, например. --group-directories-first --time-style='+%FT%T.%N%:::z' --indicator-style=slash .     

ответ дан Mechanical snail 17.11.2013 в 02:38
0

ls -l *

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

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

    
ответ дан H2ONaCl 21.09.2013 в 05:45
0

$ ls -l [DIRECTORY] | sed 1d
(output contains file names)

$ ls -ld [path-to-dir]/*
(output contains relative paths but will preserve colors)

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

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

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

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

    
ответ дан Robert Vila 03.03.2014 в 04:28