Я использовал следующую команду для списка десяти самых больших файлов, на любой глубине, под текущим каталогом:
find -type f -size +10M -exec ls -gGsSh1 {} + | awk 'NR<=10 {print $0}'
(Я использую awk
вместо head
предотвратить поврежденную ошибку канала, когда список является слишком длинным),
Это работает хорошо, но очевидно трудно помнить и ввести каждый раз. Я пытался поместить это в .bash_aliases, но он не работает затем (он печатает 10 пустых строк).
Если я использую less
вместо awk
, вывод представлен правильно, но это означает показывать целый список файлов, больше, чем 10 МБ (мой более низкий порог), отсортированный по размеру, а не только главным.
Так, что делает awk
дросселируйте как часть искаженной команды здесь (предполагающий, что это - действительно проблема), и что я могу сделать для фиксации ее?
При использовании этой команды в качестве псевдонима, $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