Câu trả lời:
Đặt mọi tệp vào một tệp tar riêng biệt sẽ không có ý nghĩa gì trong kịch bản này. Bạn có thể sử dụng gzip
để nén chúng trực tiếp:
gzip *
sẽ dẫn đến file1.out.gz
, file2.out.gz
vv
Bạn sẽ tar
chỉ sử dụng nếu bạn cần một kho lưu trữ nén dưới dạng một tệp.
Nếu bạn cần một kho lưu trữ tar cho mỗi tệp, bạn có thể tạo nó như sau:
for i in *; do tar -czf $i.tar.gz $i; done
find . -maxdepth 1 -type d ! -path . | while read a_dir; do tar -zcvf ${a_dir}.tgz ${a_dir} --remove-files; done
find . -maxdepth 1 -mindepth 1 -type d -exec tar -zcvf {}.tgz {} --remove-files \;
Để xây dựng dựa trên câu trả lời của @ SvenW (sẽ chỉ hoạt động trên thư mục hiện tại), nếu bạn có số lượng tệp LỚN hoặc muốn thực hiện trên cấu trúc thư mục đệ quy, bạn cũng có thể sử dụng
find . -type f -exec gzip \{\} \;
và nếu bạn cần đặt đầu ra vào một thư mục khác (trong ví dụ này ../target
) và không muốn xóa bản gốc, bạn có thể làm một cái gì đó như:
find . -type f -print | while read fname ; do
mkdir -p "../target/`dirname \"$fname\"`"
gzip -c "$fname" > "../target/$fname.gz"
done
find . -type f -exec gzip {} \;
sẽ là đủ Mã thứ hai sẽ thất bại với tên tệp chứa khoảng trắng và tương tự.
{}
như một thói quen). Tuy nhiên, những người khác đã đăng chúng dưới dạng câu trả lời cho câu hỏi của bạn.
find . -type f -exec grep -Iq . {} \; -and -exec gzip {} \;