2011-07-27 36 views
6

Tôi đang chạy các centos và tôi có khoảng 1.300 tệp trong một thư mục mà mỗi tệp cần được bzipped riêng lẻ. Điều gì sẽ là cách dễ nhất để bàn giao điều này?Bz2 mỗi tệp trong một thư mục

Trả lời

16

Nếu tất cả các file nằm trong một thư mục duy nhất thì:

bzip2 * 

là đủ. Một cách tiếp cận mạnh mẽ hơn là:

find . -type f -exec bzip2 {} + 

Mà sẽ nén tất cả các tập tin trong thư mục hiện hành và thư mục con của nó, và sẽ làm việc ngay cả khi bạn có hàng chục ngàn file (sử dụng * sẽ phá vỡ nếu có quá nhiều tệp trong thư mục).

Nếu máy tính của bạn có nhiều lõi, bạn có thể cải thiện thêm tính năng này bằng cách nén nhiều tệp cùng một lúc. Ví dụ, nếu bạn muốn để nén 4 file đồng thời, sử dụng:

find . -type f -print0 | xargs -0 -n1 -P4 bzip2 
+0

Tôi không hiểu vị trí trong lệnh cuối cùng của bạn mà bạn chỉ định sử dụng bzip2 –

+0

bên phải, nó thiếu lệnh "bzip2". đã sửa. – sagi

+0

Ý nghĩa của '{} +' là gì? – Lee

0

Từ bên trong thư mục: bzip2 *

0
find PATH_TO_FOLDER -maxdepth 1 -type f -exec bzip2 -zk {} \; 
2

Để bzip2 trên đa lõi Mac, bạn có thể dùng lệnh sau (khi bạn đang ở trong thư mục mà bạn muốn bzip)

find . -type f -print0 | xargs -0 -n1 -P14 /opt/local/bin/bzip2 

Điều này sẽ bzip mỗi tập tin đệ quy trong thiết bị đầu cuối của bạn đang sử dụng đồng thời 14 lõi CPU.

Bạn có thể điều chỉnh bao nhiêu lõi để sử dụng bằng cách chỉnh sửa

-P14 

Nếu bạn không biết nơi nhị phân bzip2 là, bạn có thể dùng lệnh sau để con số nó ra

which bzip2 

Đầu ra của lệnh đó là những gì bạn có thể thay thế

/opt/local/bin/bzip2 

với

Các vấn đề liên quan