С помощью команды ls список папок и их общий размер
можно использовать ls
в Unix, чтобы перечислить общий размер подкаталога и все его содержимое, в отличие от обычного 4K, который (я предполагаю) является только файлом каталога? Т. Е.
total 12K
drwxrwxr-x 6 *** *** 4.0K 2009-06-19 10:10 branches
drwxrwxr-x 13 *** *** 4.0K 2009-06-19 10:52 tags
drwxrwxr-x 16 *** *** 4.0K 2009-06-19 10:02 trunk
после очистки man-страниц я прихожу пустой.
22 ответов
попробуйте что-то вроде:
du -sh *
короткая версия:
du --summary --human-readable *
объяснение:
du
: Disk Uшалфей
-s
: отображение сводки для каждого указанного файла. (Эквивалент -d 0
)
-h
: "удобочитаемое" на выходе. Используйте единичные суффиксы:Byte,Kibibyte (KiB),Mebibyte (MiB), Gibibyte (GiB), Tebibyte (TiB) и Pebibyte (PiB). (БАЗЫ2)
чтобы перечислить самые большие каталоги из текущего каталога в удобочитаемом формате:
du -sh * | sort -hr
лучший способ ограничить количество строк может быть
du -sh * | sort -hr | head -n10
где вы можете увеличить суффикс -n
флаг для ограничения количества строк, перечисленных
пример:
[~]$ du -sh * | sort -hr
48M app
11M lib
6.7M Vendor
1.1M composer.phar
488K phpcs.phar
488K phpcbf.phar
72K doc
16K nbproject
8.0K composer.lock
4.0K README.md
это делает его более удобным для чтения :)
, чтобы отобразить его в использовать:
(du -sh ./*; ls -lh --color=no) | awk '{ if( == "total") {X = 1} else if (!X) {SIZES[] = } else { sub( "[ ]*", sprintf("%-7s ", SIZES["./" ]), ); print } }'
код Awk объяснил:
if( == "total") { // Set X when start of ls is detected
X = 1
} else if (!X) { // Until X is set, collect the sizes from `du`
SIZES[] =
} else {
// Replace the size on current current line (with alignment)
sub( "[ ]*", sprintf("%-7s ", SIZES["./" ]), );
print
}
пример вывода:
drwxr-xr-x 2 root root 4.0K Feb 12 16:43 cgi-bin
drwxrws--- 6 root www 20M Feb 18 11:07 document_root
drwxr-xr-x 3 root root 1.3M Feb 18 00:18 icons
drwxrwsr-x 2 localusr www 8.0K Dec 27 01:23 passwd
команда, которую вы хотите ,это 'du-sk' du = "использование диска"
флаг-k дает вам вывод в килобайтах, а не du по умолчанию секторов диска (512-байтовых блоков).
флаг-s будет перечислять только вещи в каталоге верхнего уровня (т. е. текущий каталог по умолчанию или каталог, указанный в командной строке). Странно, что du имеет противоположное поведение ls в этом отношении. По умолчанию du рекурсивно даст вам использование диска каждого подкаталога. Напротив, ls будет давать только файлы списка в указанном каталоге. (ls-R дает рекурсивное поведение.)
поместите это объявление функции оболочки в сценарии инициализации оболочки:
function duls {
paste <( du -hs -- "$@" | cut -f1 ) <( ls -ld -- "$@" )
}
я назвал его duls
потому что он показывает выход из du
и ls
(именно в таком порядке):
$ duls
210M drwxr-xr-x 21 kk staff 714 Jun 15 09:32 .
$ duls *
36K -rw-r--r-- 1 kk staff 35147 Jun 9 16:03 COPYING
8.0K -rw-r--r-- 1 kk staff 6962 Jun 9 16:03 INSTALL
28K -rw-r--r-- 1 kk staff 24816 Jun 10 13:26 Makefile
4.0K -rw-r--r-- 1 kk staff 75 Jun 9 16:03 Makefile.am
24K -rw-r--r-- 1 kk staff 24473 Jun 10 13:26 Makefile.in
4.0K -rw-r--r-- 1 kk staff 1689 Jun 9 16:03 README
120K -rw-r--r-- 1 kk staff 121585 Jun 10 13:26 aclocal.m4
684K drwxr-xr-x 7 kk staff 238 Jun 10 13:26 autom4te.cache
128K drwxr-xr-x 8 kk staff 272 Jun 9 16:03 build
60K -rw-r--r-- 1 kk staff 60083 Jun 10 13:26 config.log
36K -rwxr-xr-x 1 kk staff 34716 Jun 10 13:26 config.status
264K -rwxr-xr-x 1 kk staff 266637 Jun 10 13:26 configure
8.0K -rw-r--r-- 1 kk staff 4280 Jun 10 13:25 configure.ac
7.0M drwxr-xr-x 8 kk staff 272 Jun 10 13:26 doc
2.3M drwxr-xr-x 28 kk staff 952 Jun 10 13:26 examples
6.2M -rw-r--r-- 1 kk staff 6505797 Jun 15 09:32 mrbayes-3.2.7-dev.tar.gz
11M drwxr-xr-x 42 kk staff 1428 Jun 10 13:26 src
$ duls doc
7.0M drwxr-xr-x 8 kk staff 272 Jun 10 13:26 doc
$ duls [bM]*
28K -rw-r--r-- 1 kk staff 24816 Jun 10 13:26 Makefile
4.0K -rw-r--r-- 1 kk staff 75 Jun 9 16:03 Makefile.am
24K -rw-r--r-- 1 kk staff 24473 Jun 10 13:26 Makefile.in
128K drwxr-xr-x 8 kk staff 272 Jun 9 16:03 build
объяснение:
на paste
утилита создает столбцы из своего ввода в соответствии со спецификацией, которую вы ему даете. Учитывая два входных файла, он помещает их рядом друг с другом, с вкладкой в качестве разделителя.
мы даем ему выход du -hs -- "$@" | cut -f1
как первый файл (входной поток), а выход ls -ld -- "$@"
как второй файл.
в функции "$@"
будет оценивать список всех аргументов командной строки, каждый в двойных кавычках. Таким образом, он будет понимать подстановка символы и имена путей с пробелами и т. д.
двойные минусы (--
) сигнализирует о завершении параметров командной строки в du
и ls
. Без этого, говоря duls -l
перепутывается du
и любой вариант для du
это ls
не будет путать ls
(и параметры, которые существуют в обеих утилитах, могут не означать одно и то же, и это будет довольно беспорядок).
на cut
после du
просто вырезает первый столбец du -hs
выхода (размеры).
я решил поставить du
вывод слева, иначе мне пришлось бы управлять шатким правым столбцом (из-за различной длины имен файлов).
команда не будет примите флаги командной строки.
это было протестировано в обоих bash
и ksh93
. Он не будет работать с /bin/sh
.
это все отличные предложения, но тот, который я использую-это:
du -ksh * | sort -n -r
-ksh
убедитесь, что файлы и папки перечислены в удобочитаемом формате и в мегабайтах, килобайтах и т. д. Затем вы сортируете их численно и переворачиваете сортировку, чтобы сначала поместить большие.
единственным недостатком этой команды является то, что компьютер не знает, что Gigabyte больше мегабайта, поэтому он будет сортировать только по номерам, и вы часто найдете такие списки, как это:
120K
12M
4G
просто будьте осторожны, чтобы посмотреть на устройство.
эта команда также работает на Mac (тогда как sort -h
не например).
du -S
du есть еще один полезный вариант: -S, --separate-dirs
говорит du не включать размер подкаталогов-удобно в некоторых случаях.
Пример 1 - показывает только размеры файлов в каталоге:
du -Sh *
3,1G 10/CR2
280M 10
Пример 2-показывает размеры файлов и подкаталогов в каталоге:
du -h *
3,1G 10/CR2
3,4G 10
Это мне нравится
обновление: мне не понравился предыдущий, потому что он не показывал файлы в текущем каталоге, он только перечислял каталоги.
пример вывода для /var
на ubuntu:
sudo du -hDaxd1 /var | sort -h | tail -n10
4.0K /var/lock
4.0K /var/run
4.0K /var/www
12K /var/spool
3.7M /var/backups
33M /var/log
45M /var/webmin
231M /var/cache
1.4G /var/lib
1.7G /var
просто предупреждение, если вы хотите сравнить размеры файлов. дю дает разные результаты в зависимости от файловой системы, размера блока ... .
может случиться так, что размер файлов отличается, например, сравнивая один и тот же каталог на локальном жестком диске и запоминающем устройстве USB. Я использую следующий скрипт, включая ls, чтобы суммировать размер каталога. Результат в байтах с учетом всех подкаталогов.
echo "[GetFileSize.sh] target directory: \"\""
iRetValue=0
uiLength=$(expr length "")
if [ $uiLength -lt 2 ]; then
echo "[GetFileSize.sh] invalid target directory: \"\" - exiting!"
iRetValue=-1
else
echo "[GetFileSize.sh] computing size of files..."
# use ls to compute total size of all files - skip directories as they may
# show different sizes, depending on block size of target disk / file system
uiTotalSize=$(ls -l -R | grep -v ^d | awk '{total+=;} END {print total;}')
uiLength=$(expr length "$uiTotalSize")
if [ $uiLength -lt 1 ]; then
uiTotalSize=0
fi
echo -e "[GetFileSize.sh] total target file size: \"$uiTotalSize\""
fi
exit "$iRetValue"
для отображения размеров файлов и подкаталогов текущего каталога рекурсивно:
du -h .
для просмотра одинаковый размер информации но без печать их подкаталогов рекурсивно (что может быть огромным списком), просто используйте --max-depth:
du -h --max-depth=1 .
некоторое время я использовал Nautilus (на рабочем столе Gnome на RHEL 6.0) для удаления файлов в моей домашней папке вместо использования rm
команда в bash. В результате общий размер, показанный
du -sh
не соответствует сумме использования диска каждого подкаталога, когда я использовал
du -sh *
мне потребовалось некоторое время, чтобы понять, что Nautilus отправляет удаленные файлы в свою папку корзины, и эта папка не указана в . Так что, просто хотел поделиться этим, на случай, если кто-то столкнулся с той же проблемой.
Хм, лучший способ-использовать эту команду:
du -h -x / | sort -hr >> /home/log_size.txt
тогда вы сможете получить папки всех размеров по всему вашему серверу. Легко помочь вам найти самые большие размеры.
я столкнулся с проблемой, подобной описанной Мартином Уайльдом, в моем случае сравнивая один и тот же каталог на двух разных серверах после зеркального отображения с rsync.
вместо использования скрипта я добавил -b
флаг du
, который подсчитывает размер в байтах и насколько я могу определить, устранены различия на двух серверах. Вы все еще можете использовать -s -h
чтобы получить приемлемый выход.
следующее легко запомнить
ls -ltrapR
список содержимого каталога
- l используйте длинный формат листинга
- t сортировка по времени модификации, новейший первый
- r, -- reverse обратный порядок при сортировке
- a, --all не игнорируйте записи, начинающиеся с .
- p, --indicator-style=Слэш добавить / индикатор в каталоги
- R, --рекурсивный список подкаталогов рекурсивно