Это не будет (не может), работа - подоболочки, которые Вы используете для определения, последний файл только выполняется однажды. Шарик не будет работать, потому что оболочка оценивает подстановочный знак только ОДНАЖДЫ.
Один способ иметь дело с ним состоял бы в том, чтобы использовать 'часы' для выполнения всего этого, но это изрубит вывод каждые несколько секунды.
Вы могли замаскировать его использование 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
. Следующий метод является предпочтительным способом решить Ваш конкретный пример!
Благодаря @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
распечатать получившую строку того, что оставляют.
Исходя из вашего вопроса, я предполагаю, что ваш вызов 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}'
ls -l | awk '{ $5=""; print}'
. Я не отправил ответ, так как у меня нет подсказки, что хочет OP. – Valentin Bajrami 08.11.2013, 22:06