Câu trả lời:
Nếu tên tệp chứa khoảng trắng bạn nên sử dụng
locate -0 $something | xargs -0 rm
Từ locatetrang nam :
-0,--nullTách các mục nhập trên đầu ra bằng ký tự ASCII NUL thay vì viết từng mục trên một dòng riêng biệt. Tùy chọn này được thiết kế để có khả năng tương tác với tùy chọn --null của GNU xargs (1).
hoặc là
locate $something | while read f; do rm "$f"; done
Ngoài ra, bạn nên bảo vệ *.origbằng dấu ngoặc kép, để tránh sự mở rộng vỏ và vượt qua nó để xác định vị trí không bị ảnh hưởng.
| while readvì thư mục nhà của tôi chứa đầy các tệp có khoảng trắng.
*.orig, trình bao sẽ mở rộng mẫu thành file1.orig file2.orig ..., do đó, locatesẽ không thấy chuỗi chính xác *.orignhư bình thường.
tr '\n' '\0'.
Lệnh locate *.orig | xargs rmthực sự hoạt động nhưng điều đã xảy ra là locatetìm *.origcác tệp trong thùng rác và rmphát hiện ra lỗi No such file or directorykhi cố gắng xóa các tệp trong thùng rác.
xác định vị trí không làm hình cầu, nhưng vỏ thì có. Shell mở rộng * .orig thành những gì nó tìm thấy trong thư mục hiện tại khớp với * .orig.
Chỉ dùng
locate .orig
và nếu điều đó mang lại cho bạn những gì bạn cần
locate .orig | xargs rm
hoặc, như enzotib đã đề cập
locate -0 .orig | xargs -0 rm
nếu bạn có khoảng trắng trong tên tệp.
Một mẹo: Lưu tất cả các đường dẫn trong tệp tmp. sau đó, lặp lại trên đó:
#!/bin/bash
locate .orig /tmp/tmp.txt
while read line
do
pth=$line
rm "$pth"
done < /tmp/tmp.txt
rm -rf /tmp/tmp.txt