Linux: найдите второй крупнейший файл / каталог в размере с использованием команд

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

1
07.11.2018, 21:19
5 ответов

Предполагая, что под размером вы подразумеваете использование диска файлами каталога, отличными от -, или совокупное использование диска всеми файлами, на которые ссылаются файлы каталога (, как использование вами duпредлагает ), с утилитами GNU вы могли бы сделать:

sudo LC_ALL=C du -al0d1 /etc |
  sort -zrn |
  tail -zn+2 |
  head -zn1 |
  cut -zf2- |
  tr '\0' '\n'

tail+ head+ cutтакже можно заменить на sed -z $'1d;s/^[^\t]*\t//;q'.

Примечания:

  • с du /etc/ -hsx *(, который предполагает GNU findи что POSIXLY_CORRECTне находится в среде, поскольку вы используете параметры после не -аргументов параметра ), вы получаете использование диска /etcи всех не -скрытых файлов в текущем каталоге.
  • использование -aи-d1(расширения GNU )решает все проблемы *, исключая скрытые каталоги или достигая предела количества аргументов.
  • -hне только не -переносим, ​​но вы также теряете много точности (, так что, скорее всего, вы заставите вас сообщить о неправильном файле ), и вы усложните sortработу, так что это вполне противоречит -продуктивный.
  • без-l(расширения GNU ), жесткие ссылки учитываются только один раз, поэтому, если some-large-fileвстречается как /etc/dir1/some-large-fileи /etc/dir2/other-link-to-some-large-file, место на диске, занимаемое some-large-file, учитывается только для одного из этих каталогов по du.
  • новая строка является таким же допустимым символом, как и любой другой в имени файла (macOS фактически использовала имена файлов с символами новой строки в /etcIIRC ).Поэтому, как правило, вы не можете использовать обработку текста на основе строки -, чтобы справиться с ними. Большинство утилит GNU имеют опции -zили -0для работы с записями с разделителями NUL.
  • Обратите внимание, что в этом отсортированном списке первая запись будет для /etc. Таким образом, беря вторую запись, мы на самом деле сообщаем о самом тяжелом файле/каталоге в /etc, а не о втором -самом тяжелом.
  • Если есть совпадения, имя файла, которое сортируется последним в порядке сортировки локали, будет выбрано посредством сравнения последнего -курорта, выполненного sortбез -s.
1
27.01.2020, 23:23

С sed просто добавьте:

 | sed -n 2p

И не нужно делать эту дополнительную голову .

Завершить команду:

du /etc/ -hsx * | sort -rh | sed -n 2p

Если вы хотите использовать начало после сортировки, добавьте этот хвост:

 | tail +2

Завершить команду:

du /etc/ -hsx * | sort -rh | head -2 | tail +2
0
27.01.2020, 23:23

Вероятно, одним из вариантов было бы перевернуть результат с помощью sortеще раз и использовать head -1? Нравится:

du /etc/ -hsx * | sort -rh | head -2 | sort -r | head -1
0
27.01.2020, 23:23

What if I only want to find the second biggest file? How can I do it?

Обязательная опция zsh:

zsh -c 'print -r /etc/**/*(DoL[-2])'

Это вызывает zsh и просит его напечатать аргумент,:

  • рекурсивное расширение имени файла**/*
  • отсортировано(oупорядочено )по размеру(Lдлине ), по возрастанию
  • Dвключает dotglobдля этого одного шара, поэтому также считает скрытые файлы или файлы в скрытых каталогах.
  • ограничивается 2-й -- -последней записью в списке([-2])
2
27.01.2020, 23:23

Использовать хвост

du /etc/ -hsx * | sort -rh | head -2 | tail -1
0
27.01.2020, 23:23

Теги

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