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ừ locate
trang nam :
-0
,--null
Tá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ệ *.orig
bằ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 read
vì 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 đó, locate
sẽ không thấy chuỗi chính xác *.orig
như bình thường.
tr '\n' '\0'
.
Lệnh locate *.orig | xargs rm
thực sự hoạt động nhưng điều đã xảy ra là locate
tìm *.orig
các tệp trong thùng rác và rm
phát hiện ra lỗi No such file or directory
khi 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