LinuxForum.Fans
Тема

BASH сравнить размер файла

Автор: l_cho 19 сообщений 8835 просмотров
#278857

Доброе утро , пишу скрипт для определения и сравнения каталогов , СКРИПТ :

text

если (размер каталога больше > 2024M )
then 
.......................

Find при таком раскладе ничего не считает

text

FIND=`find /var/mail/ -size +1M -type d`

А вот файлы он может посчитать

Прошу совета

#278861
"l_cho" написал:
Прошу совета

Используйте du ;)

#278935
text

#!/bin/bash FIND=`find /var/mail/ -type d` SIZE=`du -sh $FIND` echo $SIZE

Он выдает вместе с именем файла (
Сравнить не получается

#278940

А что с чем должно сравниваться? И вообще какова цель сравнения каталогов?

#278941

Цель великая ! Как переменная типа Long :)

"l_cho" написал:
если (размер каталога больше > 2024M )
then
#278948
"l_cho" написал:
Он выдает вместе с именем файла (
Сравнить не получается

[console]
lupo@gentoo-laptop bin % cat test_du.sh
#!/bin/bash
SRC_DIR=${1} # Целевая директория
DIR_VOLUME="5000" # Объём в килобайтах

if [[ $(du -s ${SRC_DIR} | cut -f1) -gt ${DIR_VOLUME} ]];
then
echo "Каталог ${SRC_DIR} больше установленного размера"
else
echo "Размер не превышен"
fi

lupo@gentoo-laptop bin % ./test_du.sh ~/bin
Размер не превышен
lupo@gentoo-laptop bin % ./test_du.sh ~/Documentation
Каталог /home/lupo/Documentation больше установленного размера
[/console]

#278978

Точно CUT !

#278982
text

#!/bin/bash

FIND=`find /var/mail/ -type d`

VOLUME="1024"

if [[$(du -s ${FIND} | cut -f1)-gt ${VOLUME}]]; then echo "директория $FIND больше положенного размера" else echo "директория $FIND менее максимального размера" fi

что-то тут не так , все каталог менее 1024 кб ???

#278984

Вы пытаетесь присвоить переменной FIND вывод команды, в котором будет список каталогов, имеющий несколько строк.
Если вы хотите для каждого найденного каталога провести проверку, нужно делать иначе.

#278986
text
find /var/mail -type d -exec /usr/local/bin/test_du.sh '{}' \;
#278991

Намек понят , спасибо

#278997
text
du -a /var/mail | awk '( $1 > 1024)  {print $2}'
#279005

awk мощная вещь , а возможно ли выводить на печать только каталоги третьего уровня ? или скажем до третьего "/"

#279008

В данном случае, IMHO, это задача не awk, а, к примеру, find.

#279010

Мне будет полезно подумать , как придумаю выдам код сюда в тему , еще раз благодарю

#279012
"l_cho" написал:
Мне будет полезно подумать

Не удержался, чтобы не предложить «пищу для размышлений» — http://www.funtoo.org/wiki/Category:Articles (пункты A, B, S).

#279026
Lupo Alberto написал:
text
du -a /var/mail | awk '( $1 > 1024)  {print $2}'

Этого достаточно, только ключ a для du смотрит и на файлы.

#279028
"tiger_by" написал:
Этого достаточно, только ключ a для du смотрит и на файлы.

Этого как раз не достаточно — если в пути к файлам имеются пробелы, выведется только его часть.
Это был просто пример возможного использования.

#279147

du -a /var/mail | awk '( $1 > 24) {print ($2) >> "file";} '
Изобразил :D Потом можно считывать построчно и определять владельцев каталогов , которые превысили лимит.
http://lib.ru/MAN/DEMOS210/awk.txt - шикарный MAN

Войдите или зарегистрируйтесь, чтобы ответить.