Mam dysk 100 GB z plikiem 95 GB. Muszę zwolnić trochę miejsca na dysku (a teraz przeniesienie pliku z dysku nie jest opcją). Plik dobrze się skompresuje z, gzip
lub bz2
czymkolwiek, ale wszystkie te programy zapisują skompresowany plik do osobnego pliku. Nie mam na to wystarczającej ilości wolnego miejsca.
Czy istnieje sposób użycia standardowych narzędzi kompresji lub innych narzędzi uniksowych do skompresowania pliku bez użycia dodatkowego miejsca na dysku (lub przynajmniej minimalnej ilości dodatkowego miejsca na dysku)? Wyobrażam sobie coś, co kompresuje część pliku na raz i zapisuje wyniki bezpośrednio nad plikiem. Zdaję sobie sprawę, że byłoby to ryzykowne, ponieważ plik zostałby uszkodzony, gdyby kompresja została przerwana, ale nie sądzę, że mam wybór.
źródło
Odpowiedzi:
Jest to dowód koncepcyjnego bashu na jeden wiersz, ale powinien zacząć. Używaj na własne ryzyko.
Działa to poprzez przesyłanie danych gz do procesu dd, który zapisuje je z powrotem do tego samego pliku. Po zakończeniu plik jest obcinany do rozmiaru wyjścia gz.
Zakłada się, że ostatni wiersz danych wyjściowych dd jest zgodny:
Gdzie pierwsze pole jest liczbą całkowitą zapisanych bajtów. Do tego rozmiaru plik będzie musiał zostać obcięty. Nie jestem w 100% pewien, że format wyjściowy jest zawsze taki sam.
źródło
conv=notrunc
jest to konieczne?gzip -c file | dd of=file
wydaje się działać równie dobrze.gzip
) Zapisuje więcej bajtów nagłówka i danych niż bajtów danych oryginalnych, zastępując w ten sposób niektóre części pliku? Myślę, że to zależy od wybranego programu kompresji. Czy ktoś wpadł na pomysł, jak temu zapobiec lub jak to (nie) prawdopodobne jest?To nie tyle
gzip
ibzip2
zastąpić oryginał. Zapisują raczej skompresowane dane na dysk jako nowy plik, a jeśli operacja się powiedzie, odłączają oryginalny nieskompresowany plik.Jeśli masz wystarczającą ilość pamięci RAM, możesz napisać skrypt, aby tymczasowo skompresować pliki w
tmpfs
systemie plików, a następnie usunąć oryginał z dysku i zastąpić go skompresowaną wersją. Może coś takiego:Pamiętaj tylko o zużyciu pamięci, ponieważ
tmpfs
jest to zasadniczo dysk RAM. Duży plik wyjściowy może z łatwością zagłodzić system i spowodować inne problemy.źródło
Nie ma takiego narzędzia, które działałoby w ten sposób, właśnie z tego powodu, który podajesz. Niewiele osób jest skłonnych napisać narzędzie, które celowo wdraża ryzykowne zachowania.
źródło
Poleceń split i csplit można użyć do podzielenia dużego pliku na mniejsze części, a następnie skompresowania ich indywidualnie. Ponowny montaż byłby jednak czasochłonny.
źródło