Mam zestaw .tar.gz
plików, które są kopiami zapasowymi duplikatów (pełne kopie zapasowe lub przyrostowe). Chciałbym obliczyć, które katalogi zajmują najwięcej miejsca na kopiach zapasowych. Prawdopodobnie będzie to inna wartość niż obliczanie, które katalogi zajmują najwięcej miejsca w systemie plików na żywo, ponieważ muszę wziąć pod uwagę częstotliwość zmian plików (a tym samym zajmowanie miejsca na przyrostowych kopiach zapasowych) oraz stopień kompresji plików.
Wiem, że podczas gdy wiele innych formatów archiwów przechowuje skompresowane pliki jako różne podmioty w pliku archiwum, .tar.gz
pliki nie, i dlatego po kompresji nie jest możliwe uzyskanie dokładnej ilości miejsca zapisanego w archiwum przez pojedynczy plik. Czy są jakieś narzędzia do obliczania przynajmniej niektórych szacunków?
Więc zhakowałem trochę kodu C, aby znaleźć przybliżone wartości. Kod pokazuje, ile bajtów zrobiło
zlib
odczytanie z archiwum, aby dostać się do każdego kolejnego pliku. Kod jest tutaj: https://github.com/liori/targz-sizesWydaje się, że mógłbym wyodrębnić bardziej precyzyjne dane, ale te wartości nie powinny różnić się od rzeczywistych o więcej niż kilka bajtów na plik, a błąd jest uśredniany dla wszystkich plików, więc powinien być wystarczający do celu opisanego w pytanie.
źródło
tar -xzvOf /pathto/backup.tgz ./inner/pathto/compressed/item | dd > /dev/null
- mydd
(coreutils 5.97) wypisuje całkowitą liczbę bajtów zapisanych jako3690 bytes (3.7 kB) copied, 0.00244849 seconds, 1.5 MB/s
tar -czvO /pathto/uncompressed/item | dd > /dev/null
. Trochę smoły nad głową, ale myślę, że to może być to, czego chcesz. Jeśli nie, zamieńtar -czvO
nagzip -c
.tar -xzvOf /pathto/backup.tgz ./inner/pathto/compressed/item | dd | gzip -c | dd > /dev/null
...