Bạn chỉ có thể làm:
gzip *
gzip sẽ cho bạn biết nó bỏ qua các tệp đã có .gz kết thúc.
Nếu thông báo đó theo cách bạn có thể sử dụng:
gzip -q *
Những gì bạn đã thử không hoạt động, vì gzipkhông đọc tên tệp của các tệp để nén từ stdin, để làm việc đó bạn sẽ phải sử dụng:
ls | grep -v gz | xargs gzip
Bạn sẽ loại trừ các tệp có mẫu gzở bất kỳ đâu trong tên tệp, không chỉ ở cuối .¹ Bạn cũng phải lưu ý rằng phân tích cú pháp đầu ra lslà nguy hiểm khi bạn có tên tệp có dấu cách, dòng mới, v.v.
Một giải pháp sạch hơn, không dựa vào gzipviệc bỏ qua các tệp có .gzkết thúc là, cũng xử lý các tệp không nén trong thư mục con:
find . -type f ! -name "*.gz" -exec gzip {} \;
¹ Như izkatanhận xét: sử dụng .gzmột mình để cải thiện điều này, sẽ không làm việc. Bạn sẽ cần phải sử dụng grep -vF .gzhoặc grep -v '\.gz$'. Điều đó vẫn để lại nguy cơ xử lý ls'đầu ra
$để nó rõ ràng hơn. Và.dù sao bạn cũng không thoát , vì vậy sẽ chỉ loại trừ các tệp bắt đầu bằnggz(vì chúng không có "bất kỳ ký tự nào trước đógz")