Почему это не управляет работой как псевдонимом?

Я использовал следующую команду для списка десяти самых больших файлов, на любой глубине, под текущим каталогом:

find -type f -size +10M -exec ls -gGsSh1 {} + | awk 'NR<=10 {print $0}'

(Я использую awk вместо head предотвратить поврежденную ошибку канала, когда список является слишком длинным),

Это работает хорошо, но очевидно трудно помнить и ввести каждый раз. Я пытался поместить это в .bash_aliases, но он не работает затем (он печатает 10 пустых строк).

Если я использую less вместо awk, вывод представлен правильно, но это означает показывать целый список файлов, больше, чем 10 МБ (мой более низкий порог), отсортированный по размеру, а не только главным.

Так, что делает awk дросселируйте как часть искаженной команды здесь (предполагающий, что это - действительно проблема), и что я могу сделать для фиксации ее?

3
задан 6 May 2013 в 15:35

1 ответ

При использовании этой команды в качестве псевдонима, $0 больше не защищен одинарными кавычками, так преобразовывается в Ваше имя оболочки. Эти команды демонстрируют это:

$ alias F="echo '$0'"      
$ F
bash

Имя оболочки (по-видимому, bash) окажись, быть сбросом awk имя переменной, ведя к пустым строкам.

Один способ защитить $0 от оболочки расширение должно было бы использовать что-то как:

alias F="find -type f -size +1k -exec ls -gGsSh1 {} + | awk 'NR<=10 {print \$0}'"

Однако как это $0 бесполезно, можно просто удалить его из awk оператор.

find -type f -size +10M -exec ls -gGsSh1 {} + | awk 'NR<=10 {print}'

Можно пойти далее и удалить целый блок, как печать выбранной строки awk поведение по умолчанию так или иначе:

find -type f -size +10M -exec ls -gGsSh1 {} + | awk 'NR<=10'

С другой стороны, можно просто продолжать использовать head и отбрасывание сообщение об ошибке:

find -type f -size +10M -exec ls -gGsSh1 {} + 2>&1 | head
8
ответ дан 6 May 2013 в 15:35

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

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