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ì gzip
khô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 ls
là 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 gzip
việc bỏ qua các tệp có .gz
kế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ư izkata
nhận xét: sử dụng .gz
mộ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 .gz
hoặ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
")