Есть ли любой ls
параметр, который я могу использовать для отображения размера файла для каталогов также.
Когда я делаю ls -s
, это показывает мне block-size
(4k всегда) вместо размера каталога.
Спасибо!!!
Редактирование - Частичный успех
Как сказано @Arronical, Командой du -sh *
показывает файлы и каталоги с их размером. Одно маленькое улучшение я смотрю, должно отобразить каталог другим цветом как ls
шоу. Любые идеи.Спасибо.:-)
Основная идея
Можно было эмулировать ls -l
с находкой. Например, как с find
команда, которая будет работать du
на каждый каталог и найденный файл:
find . -maxdepth 1 ! -name "." -printf "%M %u %g " -exec du -sh {} \; 2> /dev/null
Демонстрационный вывод (примечание стороны, здесь я использую -type d
показать список для каталогов только для демонстрационной цели; эта команда без -type d
перечислит все файлы и каталоги):
DIR:/xieerqi
skolodya@ubuntu:$ find . -maxdepth 1 -type d ! -name "." -printf "%M %u %g " -exec du -sh {} \; 2> /dev/null | head
drwxrwxr-x xieerqi xieerqi 348K ./addRemoveDistribution
drwxr-xr-x xieerqi xieerqi 2.2G ./Downloads
drwxrwxr-x xieerqi xieerqi 4.0K ./.screenlayout
drwxr-xr-x xieerqi xieerqi 4.0K ./Public
drwxrwxr-x xieerqi xieerqi 28K ./Youku Files
drwxrwxr-x xieerqi xieerqi 142M ./.minecraft
drwx------ xieerqi xieerqi 20K ./.gnupg
drwxrwxr-x xieerqi xieerqi 2.5G ./.Genymobile
drwxrwxr-x xieerqi xieerqi 73M ./genymotion
drwxrwxr-x xieerqi xieerqi 104K ./scripts
Примечание: find
имеет -ls
флаг, который я не использую здесь по той же причине как указанная OP - она показывает канонические 4 096 байтов
Упрощение
Эта команда сама может быть превращена в псевдоним, что-то как ls2
или функция, которая затем также могла взять $1
аргумент. Например, вот то, что я поместил в мой .bashrc
и как это работает:
function lscwd
{
# Function to stat files and folders in current dir
# Takes first argument as directory to stat
# If no directory supplied, current dir assumed
if [ -z "$1" ];then
DIR="."
else
DIR="$1"
fi
find "$DIR" -maxdepth 1 ! -name "." -printf "%M %u %g " -exec du -sh {} \; 2> /dev/null
}
Демонстрационные выполнения:
DIR:/xieerqi
skolodya@ubuntu:$ lsc
lscpu lscwd
skolodya@ubuntu:$ lscwd | head
drwxrwxr-x xieerqi xieerqi 348K ./addRemoveDistribution
drwxr-xr-x xieerqi xieerqi 2.2G ./Downloads
drwxrwxr-x xieerqi xieerqi 4.0K ./.screenlayout
drwxr-xr-x xieerqi xieerqi 4.0K ./Public
drwxrwxr-x xieerqi xieerqi 28K ./Youku Files
drwxrwxr-x xieerqi xieerqi 142M ./.minecraft
drwx------ xieerqi xieerqi 20K ./.gnupg
drwxrwxr-x xieerqi xieerqi 2.5G ./.Genymobile
drwxrwxr-x xieerqi xieerqi 73M ./genymotion
drwxrwxr-x xieerqi xieerqi 104K ./scripts
DIR:/xieerqi
skolodya@ubuntu:$ lscwd /etc | head
drwxr-xr-x root root 18M /etc
drwxr-xr-x root root 68K /etc/logrotate.d
drwxr-xr-x root root 36K /etc/apm
drwxr-xr-x root root 96K /etc/speech-dispatcher
drwxr-xr-x root root 28K /etc/jwm
drwxr-xr-x root root 8.0K /etc/hp
drwxr-xr-x root root 8.0K /etc/gtk-2.0
drwxr-xr-x root root 20K /etc/gtkmathview
drwxr-xr-x root root 68K /etc/xml
drwxr-xr-x root root 8.0K /etc/esound
Выходная организация
Нет никакого пути к colorize вывода исходно в find
, который специально разработан для парсинга имен файлов. ls
окраска прибывает из специальных символов, включенных в вывод, который мы действительно не хотим.
Однако можно было прочитать полномочия. Продвижение -
в -rwxr-xr-x
средства это - регулярный файл и продвижение d
в drwxr-xr-x
каталог средств.
find
также имеет удобное -type
флаг, который мы можем использовать также для фильтрации вывода. Например, вот отредактированная версия lscwd
function lscwd2
{
# Function to stat files and folders in current dir
# Takes first argument as directory to stat
# If no directory supplied, current dir assumed
if [ -z "$1" ];then
DIR="."
else
DIR="$1"
fi
# print directories first
printf "*** DIRECTORIES *** \n"
find "$DIR" -maxdepth 1 -type d ! -name "." -printf "%M %u %g " -exec du -sh {} \; 2> /dev/null
# print non-directories second
printf "*** FILES *** \n"
find "$DIR" -maxdepth 1 ! -type d ! -name "." -printf "%M %u %g " -exec du -sh {} \; 2> /dev/null
}
И демонстрационный вывод:
DIR:/bin
skolodya@ubuntu:$ lscwd2
*** DIRECTORIES ***
drwxrwxr-x xieerqi xieerqi 4.0K ./c
drwxrwxr-x xieerqi xieerqi 12K ./python
drwxrwxr-x xieerqi xieerqi 12K ./perl
drwxrwxr-x xieerqi xieerqi 4.0K ./ANOTHERDIR
drwxrwxr-x xieerqi xieerqi 4.0K ./random
drwxrwxr-x xieerqi xieerqi 108K ./sh
drwxrwxr-x xieerqi xieerqi 38M ./cs2
drwxr-xr-x xieerqi xieerqi 414M ./arduino-1.6.7
drwxrwxr-x xieerqi xieerqi 24K ./codereview
*** FILES ***
-rwxrwxr-x xieerqi xieerqi 4.0K ./preventShutdown.sh
-rw-rw-r-- xieerqi xieerqi 4.0K ./Dimmer.desktop
-rwxrwxr-x xieerqi xieerqi 4.0K ./updateWarning.sh
-rw-rw-r-- xieerqi xieerqi 4.0K ./somefile.txt
-rw-r--r-- xieerqi xieerqi 4.0K ./.bashrc
-rwxr-xr-x xieerqi xieerqi 4.0K ./setup.sh
-rwxrwxr-x xieerqi xieerqi 4.0K ./whiledemo.csh
-rwxr-xr-x xieerqi xieerqi 4.0K ./fmtcode.awk
-rwxrwxr-x xieerqi xieerqi 4.0K ./batmon.sh
-rwxr-xr-x xieerqi xieerqi 4.0K ./Dimmer.sh
-rw-rw-r-- xieerqi xieerqi 4.0K ./somefile2.txt
Вывод иногда может быть очень долгим, таким образом, я предложил бы использовать эту функцию в сочетании с less
утилита подкачки страниц. Просто передайте вывод по каналу как так lscwd2 | less
О ls и статистике
Почему люди всегда предлагают du
? izx в его кратком и потрясающем ответе объяснил это путь лучше, что я мог, но короче говоря на Unix и Linux все - файл, и в действительности каталог является файлом со списком файлов, связанных с ним. Таким образом, stat
и ls
дайте размер того специального файла, не общую сумму всех файлов, связанных с каталогом. Но du
то, что спасает положение. Отметьте что описание в man du
говорит:
Суммируйте использование диска каждого ФАЙЛА, рекурсивно для каталогов.
du
утилита спрыгивает в каждый каталог и подводит итог размера файла каждого файла там. Путь, отличающийся, от какой ls
и stat
сделать.
Таким образом, цель каждой утилиты очень отличается. ls
делает точно, что просят сделать - перечисляют размеры файла, и прибывающий из мира Windows, мы понимаем размер каталога, как являющийся этой "сумкой", размер которой зависит от количества яблок в нем, если я могу использовать его для сравнения. Unix немного отличается, да, но это реалистично. Возможно, это не угождает пользовательским потребностям так очень, но это имеет смысл в реальном, физическом смысле.
На ноте стороны размер блока по умолчанию 4k, но после того как файл растет по 4k, файловая система должна будет выделить больше места. Например, моя домашняя папка имеет 73 ГБ в общем размере всех файлов там. Что относительно размера блока каталога?
DIR:/bin
skolodya@ubuntu:$ ls -ld $HOME
drwxr-xr-x 94 xieerqi xieerqi 16384 Jan 22 07:24 /home/xieerqi/
Я не знаю ни о каких параметрах для эти ls
команда, которая может достигнуть этого, но возможно найти размеры каталогов и файлов в существующем рабочем каталоге с эти du
команда.
использование Попытки:
du -sh ./*
должно быть возможно создать функцию или сценарий, который дает Вам информацию относительно того, является ли это файлом или каталогом, для которого отображается информация.
Как muru, на который указывают, -d
или --max-depth
, опция, с параметром 1, была бы полезна для списка просто каталогов. Это также работает вокруг того, что скрытые каталоги не перечислены нормальной оболочкой globbing (./*
часть).
Парсинг вывода ls
всегда приводит к горю. См. это объяснение . Используйте stat
(man stat
) вместо этого.
от man stat
:
NAME
stat - display file or file system status
SYNOPSIS
stat [OPTION]... FILE...
DESCRIPTION
Display file or file system status.
...
%b number of blocks allocated (see %B)
%B the size in bytes of each block reported by %b
...
%n file name
И пример в моей системе YMMV:
$ stat --format="%n %b %B" .bashrc $HOME
.bashrc 32 512
/home/w3 192 512