Không bao giờ phân tích đầu ra của ls
Đề xuất của tôi là tránh phân tích đầu ra của ls [ 1 ] , thậm chí nhiều hơn nếu kết hợp với del
lệnh. Điều này vì nhiều lý do chủ yếu liên quan đến các ký tự không mong muốn và không thông thường được cho phép trong tên tệp.
Ngay cả khi bạn mong đợi rằng tên tệp thuộc các gói Linux sẽ "hoạt động tốt" , dù sao thì vấn đề này vẫn có thể xuất hiện nếu các tệp khác có trong cùng thư mục nhưng bạn không biết hoặc không chú ý.
Sử dụng tốt hơn find
, mở rộng tab (bắt đầu viết tên và nhấn Tab), mở rộng tên tệp [ 2 ] dưới dạng *MyKey*
...
Một giải pháp nhanh chóng
Vì bạn muốn chọn tất cả các gói (kết thúc bằng .deb
) với "google" bên trong, bạn có thể tạo yêu cầu của mình bằng ký tự đại diện *
*google*.deb
và thực hiện đơn giản
rm -i *google*.deb
sẽ chọn từng tên tệp với "google" ở giữa sẽ kết thúc để .deb
hiện diện trong thư mục hiện tại. Tùy chọn -i
(tương tác) sẽ nhắc xác nhận, một thói quen tốt khi bạn xóa các tệp có phần mở rộng tham số.
Một giải pháp gần với triết lý về nỗ lực của bạn
Nếu mục đích của bạn là xây dựng đoạn lệnh của bạn sau từng mảnh, vì vậy bạn đã thực hiện ls
, sau ls | grep google
và chỉ sau khi bạn kiểm tra đầu ra của mình, bạn có thể thực hiện nó trong một mạng con $(...)
với
rm -i $(ls | grep google)
Một cách nhanh hơn và nguy hiểm hơn [ 3 ] , là sử dụng!!
ls | grep google
rm -i $(!!)
Điều đó sẽ thực hiện lệnh cuối cùng kết thúc trong lịch sử của bạn . Bạn có thể tự bảo vệ mình khỏi thực tế là bạn không có quyền kiểm soát trực quan về dòng mà bạn sẽ thực hiện nếu bạn đã bật trước các tùy chọn shell histverify
với shopt -s histverify
.
rm -i *chrome*.deb