Chcę zmniejszyć rozmiar pliku metodą brute-force, tzn. Nie dbam o resztę, chcę po prostu wyciąć plik, powiedzmy o połowę, i odrzucić resztę.
Pierwszą rzeczą, jaka przychodzi mi na myśl, jest obcięcie Perla . Podążam za przykładem na tej stronie i zrobiłem dokładnie to samo:
seq 9 > test.txt
ls -l test.txt
perl -we 'open( FILE, "< ./test.txt" ) && truncate( FILE, 8 ) && close(FILE);'
Ale plik nadal ma ten sam rozmiar:
$ ls -lgG test.txt
-rw-rw---- 1 18 2013-08-08 09:49 test.txt
Jak mogę to zrobić?
otwiera plik do odczytu. Jednak w celu obcięcia pliku należy go zmodyfikować, aby uchwyt pliku tylko do odczytu nie działał. Musisz użyć trybu „modyfikuj” (
"+>"
).Na marginesie zawsze zadziwia mnie, gdy ludzie pozwalają cicho na wywołania systemowe, a następnie pytają, co poszło nie tak. NaIstotnym elementem diagnozowania problemu patrzy się na komunikat o błędzie wyprodukowane; nawet jeśli tego nie rozumiesz, życie jest znacznie łatwiejsze dla tych, którzy proszą o pomoc.
Następujące byłyby nieco bardziej pomocne:
chociaż wprawdzie zgłosiłoby to tylko „nieprawidłowy argument”. Mimo to jest to przydatna informacja i może doprowadzić do wniosku, że tryb otwarty był zły (tak jak dla mnie).
źródło
Możesz użyć
tail
do wycięcia ostatnich 100000 bajtów, przykład:-c wyświetla końcowe 100 000 bajtów pliku, aby uzyskać więcej opcji:
Aby zamienić oryginalny plik na właśnie wygenerowany plik:
źródło
Odpowiedź powyżej cytując obcięcie jest miła. dd wykona również zadanie:
źródło
jest na to zupełnie inny sposób, używając bash, używając programu ed. poniższy skrypt zachowa tylko ostatnie 5000 wierszy wszystkich plików znajdujących się w określonym katalogu. można to łatwo zmodyfikować, aby wyświetlać w pętli kilka katalogów, zmieniać liczbę wierszy itp.
źródło