Tar: tránh lưu trữ các tệp lớn hơn kích thước nhất định


11

Tôi muốn lưu trữ các tệp (có tar) có kích thước dưới 3 MB. Nhưng tôi cũng muốn giữ lại các thư mục chứa các tệp đó. (vì vậy tôi không thể sử dụng findlệnh). Tôi chỉ muốn tránh các tệp có kích thước trên 3 MB. Điều này có thể giải quyết như thế nào?


2
Vậy tại sao bạn không thể sử dụng findlại?
Ignacio Vazquez-Abrams

Lệnh find có thể giữ các thư mục nguyên vẹn không?
nixnotwin

Câu trả lời:


23

Đơn giản hơn bạn nghĩ:

$ tar cf small-archive.tar /big/tree --exclude-from <(find /big/tree -size +3M)

Trên một ghi chú bán liên quan (liên quan đến tuyên bố của bạn mà bạn không thể sử dụng find) để có được danh sách tất cả các tệp (bao gồm các thư mục) trong một đường dẫn trừ các tệp lớn hơn 3MiB, hãy sử dụng:

$ find . -size -3M -o -type d

Sau đó bạn có thể làm:

$ tar cf small-archive.tar --no-recursion --files-from <(find /big/tree -size -3M -o -type d)

Nhưng tôi thích cái đầu tiên vì nó đơn giản hơn, thể hiện rõ ràng những gì bạn muốn và sẽ dẫn đến ít bất ngờ hơn.


2
+1 gì! Một người lịch sự, thân thiện trên SF?!?
Jongosi

1
+1 trầm tích giống nhau. quá nhiều troll tự cao tự đại trên SF gần đây.
Patoshi パ ト

* tình cảm: P :)
MikeyB

1

Nếu tên tệp chứa dấu ngoặc vuông, trong một số hệ thống, cần loại trừ rõ ràng. Ví dụ

$ mkdir test
$ echo "abcde123456" > ./test/a[b].txt
$ echo "1" > ./test/a1.txt
$ ls -la ./test
total 16
drwxrwxr-x 2 user user 4096 Jan 10 16:38 .
drwx------ 4 user user 4096 Jan 10 16:38 ..
-rw-rw-r-- 1 user user    2 Jan 10 16:38 a1.txt
-rw-rw-r-- 1 user user   12 Jan 10 16:38 a[b].txt
$ tar -zcvpf a.tar.gz ./test
./test/
./test/a[b].txt
./test/a1.txt
$ tar -zcvpf a3.tar.gz ./test --exclude-from <(find ./test -type f -size +3c)
./test/
./test/a[b].txt
./test/a1.txt
$ tar -zcvpf ax.tar.gz ./test --exclude-from <(find ./test -type f -size +3c) --exclude '*\[*'
./test/
./test/a1.txt

0

Nếu bạn đang cố gắng thực hiện việc này trên máy chủ thông qua SSH, thì nó sẽ không hoạt động vì điều này . Để khắc phục nó, bạn có thể sử dụng ống và xargs:

find /path/to/dir -type f -size -3M | xargs tar cf archive.tar
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.