LINUX.ORG.RU

Подсчёт размеров каталогов по заданному списку файлов

 ,


1

1

Дан список файловых путей и их размеры:

dir1/subdir1/filename1 100
dir1/subdir1/filename2 1000
dir1/subdir2/filename1 3000
dir2/subdir1/filename1 10
dir2/subdir1/filename2 10
dir2/subdir1/filename3 10

Нужно сгенерировать отчёт, дающий статистику по каждому каталогу - какой у него размер и сколько в нём файлов (включая подкаталоги). Как-то так:

. 4130 6
dir1/ 4100 3
dir1/subdir1/ 1100 2
dir1/subdir2/ 3000 1
dir2/ 30 3
dir2/subdir1/ 30 3

Тут, собственно, два пути. Или написать скрипт на awk. Или взять исходники du на Си и добавить в них этот режим. Вы бы какой вариант выбрали?

А может уже есть готовый скрипт для этого, и мне не придётся возиться с awk-ом?

У тебя дерево, где узлы это директории и листья – файлы.

У листьев есть размер, посчитать размер узла элементарно.

Реализуется на любом скриптовом языке достаточно просто

futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 1)

Quick’n’dirty:

function dirname(file) {
	sub("/[^/]*$", "", file)
	return file
}

{
	dir = $1
	while (index(dir, "/") > 0) {
		dir = dirname(dir)
		sizes[dir] += $2
		count[dir]++
	}
	totalCnt++
	total += $2
}

END {
	print ".", total, totalCnt
	for (dir in sizes) {
		print dir, sizes[dir], count[dir]
	}
}

Выдаёт:

. 4130 6
dir2/subdir1 30 3
dir1/subdir1 1100 2
dir1/subdir2 3000 1
dir1 4100 3
dir2 30 3
beastie ★★★★★
()
Ответ на: комментарий от wandrien

человек

I’d like to share a revelation that I’ve had during my time here. It came to me when I tried to classify your species and I realized that you’re not actually mammals. Every mammal on this planet instinctively develops a natural equilibrium with the surrounding environment but you humans do not. You move to an area and you multiply and multiply until every natural resource is consumed and the only way you can survive is to spread to another area. There is another organism on this planet that follows the same pattern. Do you know what it is? A virus! Human beings are a disease, a cancer of this planet. You’re a plague and we are the cure.

mord0d ★★★★★
()