/tmp
может быть и иногда, убран на перезагрузке. /var/tmp
сохраняется между перезагрузками.
Вы могли использовать что-то, любят, находят и вид.
find . -type f -ls | sort -r -n -k7
( -ls
опция не является стандартной, но найдена во многих, находят реализации, не только GNU один. В GNU находят и другие, он отображает что-то подобное ls -li
за немногим исключением, например, файлы с ACLs не отмечены с +),
Если имена файлов могут содержать символы новой строки, с GNU находят и вид GNU:
find . -type f -ls -printf '\0' | sort -zk7rn | tr -d '\0'
Просто используйте что-то как:
ls -lS /path/to/folder/
Капитал S.
Это отсортирует файлы по размеру.
Также см.:
-S sort by file size
Если Вы хотите отсортировать в обратном порядке, просто добавьте -r
переключатель.
Обновление:
Для исключения каталогов (и если ни одни из имен файлов или целей символьной ссылки не содержат символы новой строки):
ls -lS | grep -v '^d'
Обновление 2:
Я вижу теперь, как это все еще показывает символьные ссылки, которые могли быть папками. Символьные ссылки всегда начинаются с буквы l, как в ссылке.
Измените команду для фильтрации для a -
. Это должно только оставить регулярные файлы:
ls -lS | grep '^-'
В моей системе это только показывает регулярные файлы.
обновление 3:
Для добавления рекурсии я оставил бы сортировку строк к sort
управляйте и скажите этому использовать 5-й столбец для вида на.
ls -lR | grep '^-' | sort -k 5 -rn
-rn
средства, Обратные и числовые для получения самых больших файлов наверху. Вниз сторона этой команды - то, что она не показывает полный путь файлов.
При необходимости в полном пути файлов используйте что-то вроде этого:
find . -type f -exec du -h {} + | sort -r -h
find
команда рекурсивно найдет все файлы во всех подкаталогах .
и звоните du -h
(значение использования диска - человекочитаемый), и затем сортируют вывод снова. Если Ваш find
/sort
не поддерживает -h
, замена du -k
и sort -rn
. Обратите внимание, что размер и использование диска не являются тем же самым.
du
дает использование диска, которое отличается от размера файла. С (GNU) du -h
, числовой вид не будет работать (Вам будет нужно -h
Опция GNU отсортировать). xargs ожидают список возможно заключенных в кавычки слов, как введено, таким образом, он не будет работать, если имена файлов будут содержать пробелы или заключенные в кавычки символы.
– Stéphane Chazelas
04.11.2012, 01:57
find . -type f -print0 | xargs -0 du -h | sort -rh
. Если Вы просто хотите, говорят самые большие 30 файлов: find . -type f -print0 | xargs -0 du -h | sort -rh | head -n 30
.
– user7543
16.05.2016, 14:13
С zsh и GNU ls:
ls -ldU -- **/*(.OL)
Где (.OL)
спецификатор шарика, .
выбрать регулярные файлы только, OL
к обратному порядку длиной (размер файла, o
для порядка по возрастанию, O
для убывания).
(обратите внимание, что более старые версии zsh имели проблемы с размерами файла по 2^32).
Некоторые операционные системы имеют предел на размер списка аргументов, переданного команде. В тех случаях Вам было бы нужно:
autoload -U zargs
zargs ./**/*(.OL) -- ls -ldU
Если Вы просто хотите список файлов а не подробного результата, просто сделайте:
print -rl -- **/*(.OL)
Если Вы хотите включать скрытые файлы (чье имя запускается с точки, кроме .
и ..
) и поиск в скрытых каталогах также, добавляют D
спецификатор globbing:
print -rl -- **/*(.DOL)
Высказывание, что "файлы могли присутствовать где угодно в определенной папке", подразумевает, что Вы хотите рекурсивно убывать все каталоги (папки) в начальном каталоге (папка). Это что find
предназначен, чтобы сделать:
find . -type f -exec ls -lSd {} +
Это "находит" все файлы в текущем рабочем каталоге (.
). Для каждого найденного файла, ls
процесс выполняется для сортировки объектов, найденных в порядке размера. +
разделитель к -exec
причины несколько аргументов, которые будут переданы как список ls
. Если Ваш каталог (папка) не содержит очень большое количество файлов, у Вас должен быть один список (и таким образом один разветвленный процесс), ведя к результату, которого Вы требуете.
Я записал что-то до этой степени некоторое время назад. Вы могли передать аргумент для определения сколько файлов, чтобы перечислить, или просто ввести big
, в том, какой случай Вы получаете 10.
big () {
NUM_FILES=10;
if [ $1 ]; then
NUM_FILES=$1;
fi;
du | sort -nr | head -n $NUM_FILES
}
Попробуй это, мне подходит.
$ найдите /home/san -type f -printf '%s %p\n'| sort -nr | head -n 10
# find /root -type f -exec ls -lS {} + головка | -n 10 | awk '{ печатает $5, $9 }'
Не идеальный ответ, но работает в некоторой степени
$ ls -lS |grep '^-' | head -n 6
Эту же команду sed можно упростить, указав, сколько узоры пространства слов требуется сопоставить. У меня не было больших строковых файлов, чтобы проверить его, но без циклов в вашем исходном сценарии это должно выполняться так быстро, как ваш процессор может передавать данные. Дополнительные преимущества, это будет одинаково хорошо работать с многострочными файлами.
n=500; sed -r "s/((\w+\s){$n})/\1\n/g" <input.txt >output.txt
-121--36153- Последовательность
mount ... | logger
rc=$?
не работает так, как ожидалось: возвращаемое значение трубы является возвращаемым значением последнего элемента в этой трубе.
$> false | true; echo $?
0
Если используется bash, попробуйте PIPESTATUS
:
$> false | true; echo $? ${PIPESTATUS[0]}
0 1
$> true | false; echo $? {PIPESTATUS[0]}
1 0
PIPESTATUS
является переменной массива. Подробности на странице bash. Другие снаряды могут иметь что-то похожее на PIPESTATUS
Добавление к ответу Делх и комментарий Стефана Шазеласа...
find -print0
в сочетании с xargs -0
добавляет поддержку пробелов/пробелов/whatnots.
du -h | sort -rn
неправильно сортируется между различными кратными байтами, например, 1.1M будет отображаться после 128K, что неправильно.
sort -rh
(--человечно-числовая сортировка) заботится об этом, но работает только на версии GNU.
Команды, приведенные ниже, обеспечивают требуемые выходные данные.
Читаемый человеком, на GNU sort/Linux:
find. -type f -print0 | xargs -0 du -h | sort -rh
В килобайтах на BSD/OSX/others:
find. -type f -print0 | xargs -0 du -k | sort -rn
Для получения информации о BSD/OSX см. также https://unix.stackexchange.com/a/188375/82895 .
Отображение списка файлов в обратном порядке: ls -lSrh
Для возрастания: ls -lSh
Как вариант исходного вопроса, если вы хотите увидеть совокупный размер файлов в подкаталогах:
#!/bin/bash
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr
Размеры будут отображаться в мегабайтах (m
в du -sm
). Другие значения, принимаемые du
: -k
для килобайтов, -g
для гигабайтов. Использование -h
для человекочитаемого отображения невозможно, поскольку это нарушит сортировку.
Вот версия, которая использует sed
для добавления M
для мегабайта:
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr | sed -E 's/^([0-9]+)/\1M/g'
Каталог для отображения задается через ${1:-.}
, который будет использовать первый аргумент командной строки, если он предоставлен, или использовать текущий каталог, если он вызван без аргументов.
ПРИМЕЧАНИЕ: Это может занять много времени при большом количестве файлов. Опция -type d
выводит список только подкаталогов и исключает файлы в текущей папке; если вы хотите видеть и файлы в текущей папке, удалите ее.
Примечание: вы можете использовать
ncdu
вместо этого, который доступен в большинстве репозиториев linux (на ubuntu/debianapt install ncdu
), а также на osx (brew install ncdu
).
Список файлов по размеру по возрастанию будет выглядеть так:
ls -lSr
Опции: