Как сравнить размер двух каталогов? - PullRequest
6 голосов
/ 22 сентября 2010

Я хочу сравнить общий размер двух каталогов dir1 и dir2 в разных файловых системах, так что если diff -r dir1 dir2 вернет 0, то общие размеры будут равны. Команда du возвращает использование диска, а ее опция --apparent-size не решает проблему. Я сейчас использую что-то вроде

find dir1 ! -type d |xargs wc -c |tail -1

чтобы узнать приблизительный размер dir1. Есть ли лучшее решение?

редактирование: например, у меня (diff -r dir1 dir2 возвращает 0: они равны):

du -s dir1 --> 540
du -s dir2 --> 166

du -sb dir1 --> 250815 (the -b option is equivalent to --apparent-size -B1)
du -sb dir2 --> 71495

find dir1 ! -type d |xargs wc -c --> 62399
find dir2 ! -type d |xargs wc -c --> 62399 

Ответы [ 2 ]

6 голосов
/ 24 сентября 2012

Я не могу знать, что вы хотите ясно.Может ты этого хочешь?
diff <(du -sh dir1) <(du -sh dir2)

4 голосов
/ 22 сентября 2010

Если ваша версия find имеет -printf, вы можете найти это немного быстрее.

find dir1 ! -type d -printf "%s\n" | awk '{sum += $1} END{print sum}'

Существует как минимум два способа избежать научной нотации для вывода больших чисел в AWK.

END {OFMT = "%.0f"; print sum}

END {printf "%.0f\n", sum}

.0 усекает десятичные разряды, так как мы действительно имеем дело с целым числом, а gawk %d, похоже, неправильно действует как %g в версии 3.1.5 (но не 3.1.6 и более поздних). *

Однако из документации gawk:

ПРИМЕЧАНИЕ. При использовании целочисленных букв управления форматами для значений которые находятся вне диапазона самого широкого целочисленного типа C, gawk переключается на спецификатор формата "% g".

Остерегайтесь превышения максимального целого числа для вашей системы / версии AWK.

...