Решено: Истинный размер каталога

Модератор: Модераторы разделов

Аватара пользователя
Славик
Сообщения: 159
ОС: AltLinux2.4 master

Решено: Истинный размер каталога

Сообщение Славик »

Требуется подсказка (не готовое решение). Пришла вот в голову мысль написать сценарий на bash, выводящий истинный размер всего, что лежит в указанном каталоге. Не спрашивайте зачем. Предполагаю, что нужно рекурсивно обойти сам катлог и все его содержимое, к обычным его файлам применить команду stat, ее вывод пропустить через sed, отфильтровав собтвенно размер каждого файла, и все это просуммировать.
Возможна ли другая логика, если да, то какая?
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу
Спасибо сказали:
Аватара пользователя
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус

Re: Решено: Истинный размер каталога

Сообщение KiWi »

Код: Выделить всё

du -sh directory

?
Спасибо сказали:
Аватара пользователя
uptime
Сообщения: 1661
Статус: Drinker with computing problems
ОС: kubuntu 8.04

Re: Решено: Истинный размер каталога

Сообщение uptime »

а что вы имеете в виду, говоря "истинный размер"? Размер файла или место, занимаемое им на диске?
The answer, my friend, is blowin' in the wind.
The answer is blowin' in the wind.
Спасибо сказали:
Аватара пользователя
Славик
Сообщения: 159
ОС: AltLinux2.4 master

Re: Решено: Истинный размер каталога

Сообщение Славик »

KiWi писал(а):
28.06.2007 22:41

Код: Выделить всё

du -sh directory

?


Я всегда говорил - век живи, век учись, и дураком помрешь.
Спасибо!!!
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу
Спасибо сказали:
Аватара пользователя
Славик
Сообщения: 159
ОС: AltLinux2.4 master

Re: Решено: Истинный размер каталога

Сообщение Славик »

uptime писал(а):
28.06.2007 23:24
а что вы имеете в виду, говоря "истинный размер"?


Я имел ввиду место, занимаемое на диске всем содержимым каталога. Размер файла для собственно каталога всегда 4096 байтов, хоть в консоли по ls -l, хоть в файловом менеджере. Konqueror, правда, считает этот размер, когда в контекстном меню выбераешь Свойства, но в сценарий эту фишку не вставишь.
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Решено: Истинный размер каталога

Сообщение sash-kan »

в общем и целом, как ни избито, но
man du
du много чего умеет показывать про размеры файлов (и каталогов, естественно, тоже).
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Славик
Сообщения: 159
ОС: AltLinux2.4 master

Re: Решено: Истинный размер каталога

Сообщение Славик »

sash-kan писал(а):
29.06.2007 16:47
в общем и целом, как ни избито, но
man du



Согласен. Ить иногда и знать бы, в какой ман заглянуть.

Что меня всегда разочаровывало в форточках, так это их "гибкость". Программы работают так, как они работают, и хоть процессором об стенку - большего от них не добьешся. А здесь, если хочешь видеть то, что ты хочешь видеть, то ты этого добьешся, если ты этого действительно хочешь. Скрипт этот я написал, грохнул вот сдуру, немножко не понравилось. Завтра с утречка восстановлю, покажу рабочий вариант, и тогда будет окончательно решено.
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу
Спасибо сказали:
Аватара пользователя
Славик
Сообщения: 159
ОС: AltLinux2.4 master

Re: Решено: Истинный размер каталога

Сообщение Славик »

Уфф...
Это сообщение в основном для тех, кто будет читать потом. Новичкам, вроде меня, будет чуть больше информации к размышлению.
Как вчера и обещал:

Код:

#!/bin/bash # Сценарий выводит три характеристики для переданного # аргумента. Если передано имя существующего # обычного файла - выводится сообщение, что это # обычный файл, размер файла и его имя. # Если передано имя существующего каталога - # построчно для каждого вложенного элемента все # перечисленное выше. Недоступные для чтения элементы # пропускаются и перечисляются отдельным списком. # Обрабатываются только файлы и каталоги. US_MES=" Использование: `basename $0` -h `basename $0` [файл|каталог] " usage() { echo "$US_MES" exit 0 } [ -z "$1" ] && CURRENT=$(pwd) [ "$1" == "-h" ] && usage [ -z "$CURRENT" ] && CURRENT="$1" if [ ! -e "$CURRENT" ]; then echo "$CURRENT: Не существует!" exit fi if [ -f "$CURRENT" ]; then [ -r "$CURRENT" ] && echo "Обычный файл `du -h $CURRENT`" \ || echo "$CURRENT: недоступен" exit fi if [ -d "$CURRENT" ]; then if [ -r "$CURRENT" ]; then noread='' echo "Каталог `du -sh $CURRENT`" echo "Содержит: " for file in $CURRENT/*; do if [ -f "$file" ]; then if [ -r "$file" ]; then echo "Обычный файл `du -h $file`" else noread="$noread$file"$'\n' fi fi if [ -d "$file" ]; then if [ -r "$file" ] && [ -w "$file" ] && [ -x "$file" ]; then echo "Каталог `du -sh $file`" else noread="$noread$file"$'\n' fi fi done if [ ! -z "$noread" ]; then echo "Недоступно:" echo "$noread" fi else echo "$CURRENT: Недоступно" fi fi exit 0


Код практически не комментирован, все, что может быть непонятно есть в man bash. Не знаю, возможно можно проще или совсем по другому. В любом случае стоит пробовать писать такие программки, в процессе отладки узнаешь много о себе и о системе. Тем более, это не так сложно, как кажется.
Как говаривал Маэстро Титаренко - это не вокал, это только эскиз к вокалу.
Единственное, от чего я не смог избавиться, так это от ругательств du, когда она натыкается на недоступный каталог.

Теперь, наверное все, тема исчерпана, но если будут комментарии - я не против.
Спасибо всем!!!
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу
Спасибо сказали:
Andrew S
Сообщения: 225
Статус: экспериментатор
ОС: Conrad-Gentoo

Re: Решено: Истинный размер каталога

Сообщение Andrew S »

Славик писал(а):
30.06.2007 14:59
Единственное, от чего я не смог избавиться, так это от ругательств du, когда она натыкается на недоступный каталог.

Перенаправь поток ошибок:

Код: Выделить всё

du параметры 2>/dev/null
Спасибо сказали:
Аватара пользователя
Славик
Сообщения: 159
ОС: AltLinux2.4 master

Re: Решено: Истинный размер каталога

Сообщение Славик »

Andrew S писал(а):
30.06.2007 15:52
Перенаправь поток ошибок:

Код: Выделить всё

du параметры 2>/dev/null


:blush: :blush: :blush:
Совсем белый, горячий весь...
И ман смотрел не один раз, и помню, что так, и все равно тулю &2>/dev/null, и удивляюсь, откуда у меня фоновый процесс появляется??? :wacko:

Вот теперь окончательно все...
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу
Спасибо сказали: