Làm cách nào tôi có thể xóa tất cả các tệp .swp trong tất cả các thư mục con của mình trong Linux?
Làm cách nào tôi có thể xóa tất cả các tệp .swp trong tất cả các thư mục con của mình trong Linux?
Câu trả lời:
Xóa tất cả các tệp * .swp bên dưới thư mục hiện tại, sử dụng find
lệnh theo một trong các hình thức sau:
find . -name \*.swp -type f -delete
Các -delete
tùy chọn có nghĩa là tìm thấy sẽ trực tiếp xóa các tập tin phù hợp. Đây là kết quả phù hợp nhất với câu hỏi thực tế của OP.
Sử dụng -type f
có nghĩa là tìm sẽ chỉ xử lý các tập tin.
find . -name \*.swp -type f -exec rm -f {} \;
find . -name \*.swp -type f -exec rm -f {} +
Tùy chọn -exec
cho phép tìm để thực thi một lệnh tùy ý cho mỗi tệp. Biến thể đầu tiên sẽ chạy lệnh một lần cho mỗi tệp và biến thứ hai sẽ chạy càng ít lệnh càng tốt bằng cách thay thế {}
bằng càng nhiều tham số càng tốt.
find . -name \*.swp -type f -print0 | xargs -0 rm -f
Đường ống đầu ra đến xargs
được sử dụng dưới dạng các lệnh trên mỗi tệp phức tạp hơn mức có thể với -exec
. Tùy chọn -print0
yêu find
cầu phân tách các kết quả khớp với ASCII NULL thay vì một dòng mới và -0
nói xargs
để mong đợi đầu vào được phân tách bằng NULL. Điều này làm cho đường ống xây dựng an toàn cho tên tệp chứa khoảng trắng.
Xem man find
để biết thêm chi tiết và ví dụ.
find /path -type f -name "*.swp" -delete
find /path -type f -name "*.swp" -exec rm -f "{}" +;
bash 4.0
shopt -s globstar
rm -f /path/**/*.swp
Để tìm kiếm trong thư mục nhà của tôi (và sử dụng GNU 'find' và 'xargs'), tôi sử dụng:
find $HOME -name '*.swp' -print0 | xargs -0 rm -f
Việc sử dụng ' -print0
' và ' -0
' có nghĩa là các tên sẽ được phân cách bằng các ký tự ASCII NUL '\ 0' và điều này sẽ xử lý các đường dẫn tệp có khoảng trắng, v.v. trong tên. Nếu bạn nghĩ rằng bạn có thể có các thư mục (hoặc tệp thiết bị, hoặc FIFO hoặc các tệp không phải tệp khác) trong thư mục của bạn kết thúc bằng '.swp', bạn có thể thêm -type f
tùy chọn '' vào 'find'. Nếu bạn chỉ có thư mục, lệnh trên sẽ không xóa chúng một cách ồn ào.