Я пытаюсь найти все большие файлы на моем сервере Centos. Для этого я использую:
find / -maxdepth 10 -size +100000 -ls
Я пытался изменить -ls
на, -lsh
но это не разрешено.
Как я могу отобразить эти результаты в удобочитаемых размерах (используя суффиксы k, M,…)?
file
утилиту сfind
.Ответы:
find
не имеет сложных вариантов, какls
. Если хочешьls -h
, тебе нужно позвонитьls
.Я рекомендую эту
-xdev
опцию избегать повторения в других файловых системах, что было бы бесполезно, если вы беспокоитесь о дисковом пространстве.Если вы используете zsh в качестве оболочки, то вместо использования
find
вы можете использовать квалификаторы glob. Ограничить размер файла просто:L
за ним следует размер; Размер может иметь дополнительную единицу перед номером. Если вам не нужна максимальная глубина, вы можете использовать ее**/
для перехода в подкаталоги. Если вы заботитесь о максимальной глубине, это более обременительно, поскольку в шаблонах глобуса zsh отсутствует способ выражения «не более n вхождений». Чтобы избежать рекурсии между устройствами, используйтеd
спецификатор glob; вам нужно найти номер устройства, который вы можете отобразить с помощьюstat
команды в Linux (stat -c %d /
для отображения только номера) или с помощью собственнойstat
встроенной функции zsh (запуститьzmodload zsh/stat
для загрузки).источник
Команда, которую вы пробуете, читается для меня. Тем не менее, вы можете воспользоваться файловой утилитой с помощью команды find, как показано ниже.
Другой способ сделать это - использовать приведенную ниже команду.
Приведенная выше команда даст вам файлы в отсортированном размере файла.
Если вы используете coreutils> 7.5 , вы можете выполнить следующую команду, чтобы получить список файлов по размерам.
В моей машине у меня не было
sort -h
возможности выбора.Как вы упомянули в комментарии, ваш читабельный формат - это размер файла в килобайтах , мб или гб . Я пошел бы со второй командой, которую я отправил как ответ. Вывод, который я получил, когда использовал его в своей системе:
источник
> output
в команду. Затем вы можете открыть файл и просмотреть вывод по своему усмотрению :)du -a --max-depth=10 / | sort -rn
это близко я мог придумать. Однако в этом случае он не будет отображать размер в КБ, МБ или ГБ.Я думаю, что вы ищете больше похоже на следующее.
-exec
Позволяет выполнить команду и{}
замещаются в результате находки. Наконец,+
нужно сказать, что это конец команды, и это обязательно.источник
{}
здесь. Одиночные кавычки в команде предназначены для оболочки, но оболочка вообще никогда не увидитls -lah <args...>
команду - она видит{}
, что не нужно заключать в кавычки. Онfind
видитls -lah {}
иfind
расширяет{}
, и, как следует из названия-exec
опции, напрямуюfind
используетexec*
системный вызов для аргументов, поэтому с пробелами проблем не возникнет, потому чтоfind
не будет делить слова на ваши имена файлов.-a
Опцияls
не нужна , так как аргументы , как ожидается, будут файлы , а не каталоги. GNU находит использованиеls -dils
для этой-ls
опции, поэтому для ее наиболее точного воспроизведенияls -dilsh
.find . -type f -exec file '{}' \;
Запускает файл для каждого файла в текущем каталоге или ниже. Обратите внимание, что фигурные скобки заключены в одинарные кавычки, чтобы защитить их от интерпретации как пунктуации сценария оболочки. Точка с запятой аналогичным образом защищена с помощью обратной косой черты, хотя в этом случае также можно было использовать одинарные кавычки.{}
цитирования.