Trên máy tính của tôi khi tôi sử dụng:
find . \( -name dirname -type d \) -exec rm -r '{}' ';'
Các thư mục bị xóa nhưng tôi nhận được lỗi:
find: ‘./dirname’: No such file or directory
cho mỗi thư mục.
Thư mục của tôi không trống, vì vậy tùy chọn -delete sẽ không hoạt động với tôi. Tôi tìm thấy lý do cho hành vi này ở đây :
- find mất (không nhất thiết) mục đầu tiên trong thư mục ./. đây sẽ là ví dụ dir.1 /
- nó so sánh nó với mẫu 'dir.?'. nó có phù hợp không? Đúng.
- tìm thực thi "rm -r dir.1".
- find cố gắng nhập dir.1 / để tìm mẫu trong thư mục. nó không biết gì về lệnh exec.
- nó không tìm thấy dir.1 / nữa. trả về ENOENT (nhìn vào đầu ra strace)
Tôi đã sử dụng điều này thay vì để làm việc xung quanh:
rm -r `find . -name dirname -type d`
Hãy nhớ rằng find vẫn sẽ cố gắng truy xuất vào các thư mục có tên dirname, điều này không thực sự cần thiết và sẽ mất thêm thời gian. Tùy thuộc vào cấu trúc thư mục của bạn, bạn có thể giải quyết vấn đề này với --depth
tùy chọn tìm. Ngoài ra, nếu bạn có cấu trúc thư mục như dirname / foo / dirname, bạn sẽ nhận được lỗi "Không có tệp hoặc thư mục như vậy" từ rm. Để loại bỏ lỗi, bạn có thể chuyển hướng stderr sang / dev / null hoặc sử dụng -f
cờ (lực) với rm.
-delete
tùy chọn.