Điểm:1

Tìm kiếm và xóa các tệp có phần mở rộng nhất định hoặc kết thúc bằng một số

lá cờ cn

Tôi muốn tập lệnh của mình tìm một loại tệp nhất định và xóa nó.

tôi biết điều đó tìm đường dẫn/đến/thư mục/ -type f -name '*.ext' -delete sẽ tìm và xóa tất cả các tệp có phần mở rộng.

Bây giờ tôi cũng muốn tập lệnh của mình xóa bất kỳ tệp nào kết thúc bằng một số bất kể phần mở rộng, cũng như các tệp kết thúc bằng phần mở rộng.

Tôi đã thử các lệnh sau nhưng không thành công:

tìm đường dẫn/đến/thư mục/ -type f -name '*.ext' -name '*[0-9].* -delete
tìm đường dẫn/đến/thư mục/ -type f -name '*.ext' '*[0-9].* -delete
tìm đường dẫn/đến/thư mục/ -type f -name '*.ext,*[0-9].* -delete

Không cái nào trong số này hoạt động, tôi không chắc mình cần thay đổi chính xác điều gì hoặc mình đang làm sai điều gì.

Điểm:1
lá cờ hr

xóa các tệp kết thúc bằng phần mở rộng cũng như bất kỳ tệp nào kết thúc bằng một số bất kể phần mở rộng là gì

Điều đó yêu cầu các điều kiện được nối bởi logic OR thay vì logic AND mặc định (bắt buộc phải có dấu ngoặc đơn vì OR có mức độ ưu tiên thấp hơn AND và chúng phải được thoát hoặc trích dẫn để trình bao chuyển chúng tới tìm thấy như nghĩa đen):

tìm đường dẫn/đến/thư mục/ -type f \( -name '*.ext' -o -name '*[0-9].*' \) -print

Biến đổi -in đến -xóa bỏ một khi bạn chắc chắn rằng nó đang làm đúng. Trong triển khai GNU của tìm thấy, bạn có thể sử dụng -hoặc thay cho -o nếu bạn thích.

Mahmoud avatar
lá cờ cn
cảm ơn bạn đã phản hồi nhanh chóng, tôi còn khá mới với việc viết kịch bản, tôi cho rằng -o có nghĩa là "hoặc" nhưng tại sao tôi lại cần \ trong trường hợp này?
lá cờ hr
@Mahmoud dấu ngoặc đơn phải được thoát `\(` hoặc trích dẫn `'('` để trình bao chuyển chúng tới `find` dưới dạng chữ
Mahmoud avatar
lá cờ cn
vì vậy tôi có thể viết ```\( -name '*.ext' -o -name '*[0-9].*' \)``` như thế này thay vì ```'( -name '*.ext ' -o -name '*[0-9].*' )'``` đúng không?
lá cờ hr
@Mahmoud không, mỗi cá nhân `(` hoặc `)` cần được trích dẫn dưới dạng mã thông báo riêng `'(' -name '*.ext' -o -name '*[0-9].*' ')'`

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.