Как скрыть размер файла с помощью ls команду

Это не будет (не может), работа - подоболочки, которые Вы используете для определения, последний файл только выполняется однажды. Шарик не будет работать, потому что оболочка оценивает подстановочный знак только ОДНАЖДЫ.

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

0
08.11.2013, 22:05
2 ответа

Вы могли замаскировать его использование awk:

$ ls -l | awk '{print $1, $2, $3, $4, $6, $7, $8, $9}'

Пример

$ ls -l|awk '{print $1, $2, $3, $4, $6, $7, $8, $9}' | head -5
total 172136      
drwxrwxr-x 2 saml saml Jan 16 2013 desktop-integration
-rw-r--r-- 1 saml saml Jan 16 2013 libobasis3.6-base-3.6.5.2-2.x86_64.rpm
-rw-r--r-- 1 saml saml Jan 16 2013 libobasis3.6-binfilter-3.6.5.2-2.x86_64.rpm
-rw-r--r-- 1 saml saml Jan 16 2013 libobasis3.6-calc-3.6.5.2-2.x86_64.rpm

Подробнее

awk команда автоматически проанализирует данные в столбцы, говорит эта команда awk распечатать все столбцы за исключением 5-го, которое является столбцом с информацией о размере в нем.

Примечание: Я не рекомендовал бы делать его этот путь однако, я показываю Вам подход только, чтобы показать Вам общее понятие того, как можно проанализировать вывод от одной команды в Unix путем передачи по каналу к другому инструменту такого как awk. Следующий метод является предпочтительным способом решить Ваш конкретный пример!

Более краткий awk пример

Благодаря @val0x00ff в комментариях существует еще более эффективный способ сообщить awk распечатать все столбцы кроме 5-го.

Пример

$ ls -l|awk '{$5=""; print}' | head -5
total 172136   
drwxrwxr-x 2 saml saml  Jan 16 2013 desktop-integration
-rw-r--r-- 1 saml saml  Jan 16 2013 libobasis3.6-base-3.6.5.2-2.x86_64.rpm
-rw-r--r-- 1 saml saml  Jan 16 2013 libobasis3.6-binfilter-3.6.5.2-2.x86_64.rpm
-rw-r--r-- 1 saml saml  Jan 16 2013 libobasis3.6-calc-3.6.5.2-2.x86_64.rpm

Подробнее

В этом методе мы сообщаем awk заменять 5-й столбец пустым местом путем установки его на пустую строку, "". Все остальное оставляют, как. Мы затем говорим awk распечатать получившую строку того, что оставляют.

2
28.01.2020, 02:37
  • 1
    , я думаю более эффективный путь, был бы ls -l | awk '{ $5=""; print}'. Я не отправил ответ, так как у меня нет подсказки, что хочет OP. –  Valentin Bajrami 08.11.2013, 22:06
  • 2
    @val0x00ff - сообщение, что как ответ, я верю тому, именно это он хочет. Я не могу думать ни о какой другой интерпретации его вопроса кроме того. –  slm♦ 08.11.2013, 22:07
  • 3
    я просто говорю, возможно, это, был бы более эффективным. Вы могли просто отредактировать свой ответ. –  Valentin Bajrami 08.11.2013, 22:08
  • 4
    я не возражаю вообще. Я ценю Ваш вклад, и Вы помогаете большому количеству людей включая меня с Вашими хорошими и хорошо объясненными ответами.Удачи! –  Valentin Bajrami 08.11.2013, 22:10
  • 5
    @val0x00ff - спасибо за Ваше руководство и добрые слова! –  slm♦ 08.11.2013, 22:12

Исходя из вашего вопроса, я предполагаю, что ваш вызов lsявляется псевдонимом, который включает опцию -l. Таким образом, одним из способов было бы использовать lsбез опции -l, как указано выше, например. по телефону:

echo "call $(which ls)"
$(which ls)

Другая возможность заключается в том, что вы на самом деле хотите использовать параметр -l, но не хотите, чтобы каждый раз при изменении размера файла -вывод был разным, и только в этом случае и только если у вас нет файлов размером более 1 ТБ. в размере вы можете использовать следующую команду, которая скрывает истинный размер файла, сообщая 1T для всех файлов и избегая использования каналов и других команд:

ls -l --block-size=T

Конечно, если вы не возражаете против использования канала и хотите использовать awk, используйте решение, опубликованное @slm благодаря @val0x00ff:

ls -l | awk '{$5=""; print}'
0
28.01.2020, 02:37

Теги

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