Làm cách nào để nén tệp tại chỗ?


20

Tôi có một máy với 90% sử dụng đĩa cứng. Tôi muốn nén hơn 500 tệp nhật ký của nó thành một tệp mới nhỏ hơn. Tuy nhiên, đĩa cứng quá nhỏ để giữ cả tệp gốc và tệp nén.

Vì vậy, những gì tôi cần là nén tất cả các tệp nhật ký thành một tệp mới từng cái một, xóa từng bản gốc một khi được nén.

Làm thế nào tôi có thể làm điều đó trong Linux?


Câu trả lời:


18

gziphoặc bzip2sẽ nén tệp và tự động xóa tệp không nén (đây là hành vi mặc định của chúng).

Tuy nhiên, hãy nhớ rằng trong khi quá trình nén, cả hai tệp sẽ tồn tại.

Nếu bạn muốn nén các tệp nhật ký (ví dụ: các tệp chứa văn bản), bạn có thể thích hơn bzip2, vì nó có tỷ lệ tốt hơn cho các tệp văn bản.

bzip2 -9 myfile       # will produce myfile.bz2

So sánh và ví dụ:

$ ls -l myfile
-rw-rw-r-- 1 apaul apaul 585999 29 april 10:09 myfile

$ bzip2 -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 115780 29 april 10:09 myfile.bz2

$ bunzip2 myfile.bz2

$ gzip -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 146234 29 april 10:09 myfile.gz

CẬP NHẬT như @Jjoao đã nói với tôi trong một bình luận, thật thú vị, xzdường như có tỷ lệ tốt nhất trên các tệp đơn giản với các tùy chọn mặc định của nó:

$ xz -9 myfile

$ ls -l myfile*
-rw-rw-r-- 1 apaul apaul 109384 29 april 10:09 myfile.xz

Để biết thêm thông tin, đây là một điểm chuẩn thú vị cho các công cụ khác nhau: http://binfalse.de/2011/04/04/comparison-of-compression/

Đối với ví dụ trên, tôi sử dụng -9cho tỷ lệ nén tốt nhất, nhưng nếu thời gian cần thiết để nén dữ liệu quan trọng hơn tỷ lệ, tốt nhất bạn không nên sử dụng nó (sử dụng tùy chọn thấp hơn -1, hoặc một cái gì đó ở giữa).


2
+1; Chỉ tò mò: bạn có thể thêm một xz myfile?
JJoao

2
@Joao cảm ơn! Thật thú vị, tôi không quen sử dụng xz, nhưng tôi sẽ xem xét nó ngay bây giờ. Xem cập nhật bài viết của tôi.
apaul

3
Xin đừng làm xz -9. Nó làm tăng đáng kể bộ nhớ cần thiết cho nén / giải nén, mà không cải thiện đáng kể tỷ lệ nén. Trang này thậm chí còn nói (nhấn mạnh vào họ) "Cụ thể, không nên sử dụng mù quáng -9 cho mọi thứ như thường thấy với gzip (1) và bzip2 (1)". Mặc định xz -6là đủ tốt và thậm chí xz -0/ xz -1thường nén tốt hơn gzip -9.
dùng49740

@ user49740 bạn nói đúng. Tôi hiếm khi sử dụng -9, nhưng tôi đã sử dụng nó ở đây vì tôi muốn thực hiện một số loại điểm chuẩn cho tỷ lệ nén "trên cùng một tỷ lệ". Nhưng một lần nữa, bạn hoàn toàn đúng: đó là một ý tưởng tồi để sử dụng một cách mù quáng -9.
apaul

15

Tôi tự tìm ra một giải pháp tar.
Nó xóa tập tin duy nhất sau khi nén nó vào tập tin đích.
Tốc độ nén không phải là khá nhanh, mặc dù. Lệnh này trông giống như:

tar -zcvf my_log.tar.gz *.log --remove-files

1
Tốt 'ol tar. +1
Aaron Hall

1

Để bổ sung cho @apaul, tôi nhấn mạnh rằng việc nén các tệp riêng lẻ

 bzip2 *.log.*

(thay thế bzip2 bằng gzip, xz hoặc tệp zip yêu thích của bạn là gì) có thể quan trọng:

Bằng cách này, bạn vẫn có thể xem ( bzcat file.bz2), tìm kiếm ( bzgrep file.bz2), chỉnh sửa ( vi file.bz2) tệp đã nén và xóa các tệp cũ hơn khi cần thiết.


1

Tôi đã cố gắng làm điều này trên phiên bản BSD của tar. Trong trường hợp này, tùy chọn --remove-files không khả dụng. Điều cuối cùng tôi đã làm (và làm việc) là:

find folder_to_tar -type f -exec tar --append --file=output_tar_file.tar {} \; -exec rm -v {} \;

Nhân tiện, phiên bản BSD là những gì bạn nhận được theo mặc định nếu bạn
tình cờ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.