Мы только начинаем работу с классом UNIX и изучаем множество команд Bash. Наше задание включает выполнение различных команд в каталоге, в котором также есть несколько папок.
Я знаю, как составить список и подсчитать все обычные файлы из корневой папки, используя:
find . -type l | wc -l
Но я хотел бы знать, куда идти оттуда, чтобы найти самый большой файл во всем каталоге. Я кое-что видел относительно du
команды, но мы этого не узнали, поэтому в репертуаре вещей, которые мы изучили, я предполагаю, что нам нужно как-то связать ее с ls -t
командой.
И простите меня, если мой «жаргон» неверен, я все еще привыкаю к нему!
man
а затем введите интересующую вас команду. Вверх появится удобный ввод вручную для этой команды (нажмите,q
чтобы вернуться в командную строку).Ответы:
Цитата из этой ссылки -
источник
'%s %p\n'
на'%p\n'
и добавить|xargs ls -lh
в конецdu -am . | sort -nr | grep '\..*\.' | head
. Онm
предназначен для отображения размера файла в мегабайтах и используетсяgrep
для отображения строк как минимум с двумя точками, первая находится./
в пути, вторая - в расширении файла, например.mov
.Чтобы найти 25 самых популярных файлов в текущем каталоге и его подкаталогах:
find . -type f -exec ls -al {} \; | sort -nr -k5 | head -n 25
Это выведет 25 лучших файлов, отсортированных по размеру файлов с помощью команды конвейера «sort -nr -k5».
То же самое, но с удобочитаемыми размерами файлов:
find . -type f -exec ls -alh {} \; | sort -hr -k5 | head -n 25
источник
выходы
Если вам просто нужно имя файла:
Это позволяет избежать использования
awk
и позволяет использовать любые флаги, которые вам нужныls
.Будьте осторожны . Поскольку
xargs
пытается избежать создания слишком длинных командных строк, это может привести к сбою, если вы запустите его в каталоге с большим количеством файлов, потому что вls
конечном итоге он будет выполняться более одного раза. Это не непреодолимая проблема (вы можете собиратьhead -n 1
выходные данные каждогоls
вызова и запускатьls -S
снова, повторяя цикл до тех пор, пока у вас не будет одного файла), но это несколько портит этот подход.источник
xargs
, я пренебрегал тобой +1find . -type f -print0 | xargs -0 ls -lS | head -n 1
xargs
. Чтобы исправить это добавить сортировки:find . -type f -print0 | xargs -0 ls -lS | sort -rk 5 | head -n 10
. У меня работал на OSX.Не существует простой команды для определения самых больших файлов / каталогов в файловой системе Linux / UNIX / BSD. Однако комбинация следующих трех команд (с использованием каналов) позволяет легко узнать список самых больших файлов:
Если вам нужен более понятный для человека вывод, попробуйте:
Куда,
источник
Это список файлов рекурсивно, если они обычные файлы, сортируется по 7-му полю (размер в моем
find
выводе; проверьте ваше) и показывает только первый файл.Первый вариант
find
- это начальный путь для рекурсивного поиска. A -типf
поиска обычных файлов. Обратите внимание, что если вы попытаетесь проанализировать это как имя файла, вы можете потерпеть неудачу, если имя файла содержит пробелы, новые строки или другие специальные символы. Параметрыsort
также зависят от операционной системы. Я использую FreeBSD.«Лучшим», но более сложным и тяжелым решением было бы
find
перемещение по каталогам, но, возможно, использованиеstat
для получения подробной информации о файле, а затем, возможно,awk
для поиска наибольшего размера. Обратите внимание, что выводstat
также зависит от вашей операционной системы.источник
+7
должен делать arg? На моей машине sort просто жалуется, что не может найти файл с именем+7
.sort
своей системе. В настоящий момент я использую OS X 10.4, где использование происходит от FreeBSD sort :sort [-cmus] [-t separator] [-o output-file] [-T tempdir] [-bdfiMnr] [+POS1 [-POS2]] [-k POS1[,POS2]] [file...]
... Обратите внимание на+POS [-POS2]
. Это работает и в текущих версиях FreeBSD.-k
аргумент, например.sort -k 7
. edit: в OSX 10.5 страница руководства для сортировки, похоже, изменилась на версию, которая у меня есть.[+POS1] [-POS2]
Обозначения просто старая. Насколько я могу судить, эта нотация все еще поддерживается современной сортировкой GNU, хотя теперь, когда я смотрю, кажется, что она была удалена со страницы руководства по сортировке примерно после версии 5.1. Вы можете увидеть его на странице руководства для сортировки FreeBSD 4.11 . Думаю, я не читал справочную страницу sort с тех пор, как была выпущена FreeBSD 5.0!+POS1
параметры сортировки отсчитываются от нуля, а-k POS1
отсчитываются от единицы.Это найдет самый большой файл или папку в вашем текущем рабочем каталоге:
Чтобы найти самый большой файл во всех подкаталогах:
источник
ls
. В моем тестировании-S
флаг будет указывать по одному файлу в строке. Я поправил вторую команду. Надеюсь, теперь это полное доказательство. Спасибо.В Solaris я использую:
или
потому что все остальное, размещенное здесь, не работает. Будет найден самый большой файл в
$PWD
подкаталогах и.источник
Попробуйте следующий однострочник (отобразите 20 самых больших файлов):
или (удобочитаемые размеры):
Так что эти псевдонимы полезно иметь в ваших rc файлах:
источник
Попробуйте следующую команду:
Это напечатает самое большое имя и размер файла - более 500 МБ. Вы можете переместить
if($1 > 500000)
, и он напечатает самый большой файл в каталоге.источник
du -aS /PATH/TO/folder | sort -rn | head -2 | tail -1
или
du -aS /PATH/TO/folder | sort -rn | awk 'NR==2'
источник
Этот скрипт упрощает поиск самых больших файлов для дальнейших действий. Я храню его в моем каталоге ~ / bin и помещаю ~ / bin в свой $ PATH.
источник
Это довольно простой способ:
И вы получите вот что:
8445 examples.desktop
источник
1***
делать в конце? Для этого аргумента я получаю сообщение об ошибке «совпадений не найдено».Решение для Linux: Например, вы хотите увидеть весь список файлов / папок в вашем домашнем (/) каталоге в соответствии с размером файла / папки (в порядке убывания ).
sudo du -xm / | sort -rn | Больше
источник
Чтобы перечислить файл большего размера в папке
Результатом
ls -sh
является размерs
иh
понятное для человека представление числа размера файла.Вы могли бы использовать
ls -shS /pathFolder | head -n 1
. Более крупныйS
изls
уже упорядочивает список от больших файлов к более мелким, но первый результат - это сумма всех файлов в этой папке. Итак, если вы хотите просто перечислить файл большего размера, один файл, вам нужноhead -n 2
проверить «результат второй строки» или использовать первый пример сls sort head
.источник
источник