Xóa tất cả các tệp đệ quy mà không xóa các thư mục


10

Tôi muốn "dọn sạch" tất cả các tệp một thư mục bao gồm tất cả các tệp trong thư mục con nhưng tôi muốn để lại các thư mục con đúng chỗ. Hiểu biết của tôi rm -rlà nó cũng sẽ tự xóa các thư mục con.

Tôi không muốn xóa các tập tin ẩn (dấu chấm).

Điều này có thể giải quyết như thế nào?


1
find -type f ! -name "[.]*" -deletekhông phù hợp?
Costas

Tôi không biết. Điều đó có làm những gì tôi đang hỏi không?
Scott Wilton

Hãy thử mà không cần -delete- nó chỉ in tên tệp để xóa.
Costas

Bạn có muốn xóa các tập tin (ẩn hoặc không) trong các thư mục ẩn?
Stéphane Chazelas

Điều gì về symlink đến thư mục?
Stéphane Chazelas

Câu trả lời:


10

Sử dụng findcho điều đó:

find . ! -name '.*' ! -type d -exec rm -- {} +

1
Không phải tất cả các triển khai đều có-delete
wurtel 30/1/2015

3
@RomeoNinov vui lòng đọc câu hỏi của OP:I do not want to delete hidden (dot) files.
jimmij

1
@Costas, không, không có vỏ yêu cầu thoát +(ít nhất là không thuộc họ Bourne, csh hoặc RC). Có một truyền thuyết nói rằng một số phiên bản cũ của cshyêu cầu trốn thoát {}nhưng tôi chưa bao giờ bắt gặp những phiên bản đó.
Stéphane Chazelas

1
@ScottWilton Các thư mục ẩn được bao gồm, nhưng các tệp ẩn trong các thư mục ẩn thì không. Nếu bạn muốn từ chối tất cả các tập tin trong các thư mục ẩn thì find . ! -name '.*' ! -type d ! -path '*/.*'nên thực hiện công việc.
jimmij

1
@jimmy, giống như find . -name '.?*' -prune -o ! -type d -exec rm {} +để tránh giảm dần trong những người đó. Lưu ý rằng --không cần thiết ở đây (mặc dù không gây hại) vì các đường dẫn bắt đầu bằng ./.
Stéphane Chazelas

0

thử một cái gì đó như:

find <path> ! -name '.*' -type f -exec rm {} \;

Bất kỳ lý do tại sao để loại bỏ các tệp một lần thay vì tăng tốc mọi thứ với .... -exec rm {} + ?
Anthon

Tôi thích làm từng việc một. Các hoạt động hàng loạt (và song song) đôi khi có tác dụng phụ kỳ lạ (và khó chịu) (như tạo ra tải trọng lớn cho hệ thống con I / O)
Romeo Ninov

1
-exec rm {} +không song song, nó chỉ gọi rmvới một vài tên tệp. Nó chạy ít rmlời mời hơn nên thân thiện với tài nguyên hơn. Nếu nó hơi kém an toàn ở chỗ nó mở rộng cửa sổ cuộc đua trong đó một thành phần thư mục của các tệp cần loại bỏ có thể được thay đổi thành một liên kết tượng trưng. Nhưng chỉ -deletehoặc -execdir rm {} \;sẽ giải quyết đầy đủ điều đó.
Stéphane Chazelas

@ StéphaneChazelas, không phải trong số này (-delete hoặc -execdir) tồn tại trong UNIX. Và tôi không thấy trong câu hỏi được đề cập đến linux!
Romeo Ninov

@RomeoNinov, vâng tôi đã nói trong một nhận xét khác ở đây chỉ -execlà tiêu chuẩn. -delete-execdirđến từ BSD, GNU đã thêm chúng khoảng 10 năm sau. Trong mọi trường hợp, điều đó không liên quan gì đến Linux, vốn chỉ là một hạt nhân.
Stéphane Chazelas
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.