Tôi muốn lặp lại giữa các thư mục con của vị trí hiện tại và gzip từng tệp riêng biệt. Để nén các tệp trong một thư mục, tôi sử dụngCách gzip tất cả các tệp trong tất cả các thư mục con trong bash
for file in *; do gzip "$file"; done
nhưng điều này chỉ có thể hoạt động trên thư mục hiện tại chứ không phải thư mục con của thư mục hiện tại. Làm thế nào tôi có thể viết lại các câu lệnh trên để nó cũng nén các tệp trong tất cả các thư mục con?
Câu cuối cùng của bạn là thông tin sai lạc phổ biến. Tìm hiểu nơi một tên tập tin bắt đầu và nơi nó kết thúc. Bản thân nó, nó không có bất kỳ vấn đề với khoảng trống hoặc linebreaks và những điều funny khác. Vì vậy, '-exec gzip {}' gọi gzip với một tên tệp duy nhất, và vì không có trình bao trung gian nào được gọi, có thể giải thích một dấu trống làm dấu phân tách, gzip sẽ nhận được toàn bộ tên tệp. Gợi ý trong manpage của find dường như đã lỗi thời và có nghĩa là: shell của bạn có thể cố gắng diễn giải {} trước khi truyền nó đi tìm, nhưng không có shell nào được thấy [trong nhiều năm] (http://unix.stackexchange.com/q/) 8647/4485). –
Bạn học điều gì đó mới mỗi ngày. Cảm ơn bài học! –
+1 cho tệp * .gz loại trừ – GuruM