Điểm:-2

xóa một số tệp nhất định trừ những tệp khác

lá cờ in

Tôi đã tìm thấy rất nhiều đề xuất về cách xóa các tệp có ngoại lệ. Tuy nhiên, trường hợp này hơi khác một chút. Giả sử, tôi có 6 tệp như sau trong Ubuntu 18.04:

text_1.json
văn bản_2.json
video_1.mp4
video_2.mp4
video_1_notouch.mp4
video_2_notouch.mp4

Lệnh chỉ nên loại bỏ video_1.mp4video_2.mp4 các tệp trong khi để nguyên các tệp khác.

tôi đã thử rm -v !(*.json|*_notouch.mp4) như đề xuất đây, nhưng nó đã xóa tất cả 6 tệp.

Someone avatar
lá cờ my
Vui lòng [chỉnh sửa] câu hỏi của bạn để bao gồm 0. Phiên bản Ubuntu của bạn, 1. Vấn đề của bạn là gì 2. Bây giờ bạn muốn gì sau khi xóa các tệp đó
Someone avatar
lá cờ my
Bạn có ý nghĩa gì khi loại bỏ mọi thứ?
guiverc avatar
lá cờ cn
[Ubuntu 16.04 LTS đã hết thời hạn hỗ trợ *chuẩn*](https://fridge.ubuntu.com/2021/03/13/extended-security-maintenance-for-ubuntu-16-04-xenial-xerus -begins-april-30-2021/) do đó hiện không có chủ đề ở đây trừ khi câu hỏi của bạn dành riêng cho việc giúp bạn chuyển sang bản phát hành Ubuntu được hỗ trợ. Hỗ trợ Ubuntu 16.04 ESM có sẵn, nhưng không thuộc chủ đề ở đây, xem https://askubuntu.com/help/on-topic Xem thêm https://ubuntu.com/blog/ubuntu-16-04-lts-transitions- to-extend-an ninh-bảo trì-esm
bit_scientist avatar
lá cờ in
rất tiếc, đó là 18.04, không phải 16.04, xin lỗi vì lỗi đánh máy
bac0n avatar
lá cờ cn
`shopt extglob` nói gì?
bit_scientist avatar
lá cờ in
@bac0n Lúc trước dùng lệnh, giờ nó tắt rồi
bac0n avatar
lá cờ cn
Tôi nghĩ rằng shopt extglob được thiết lập bằng bash-completion, nhưng bạn cũng có thể nối nó vào `~/.bashrc`, tuy nhiên nó không được kế thừa, vì vậy bạn sẽ phải thiết lập lại nó khi bạn định gọi một trình bao mới, ví dụ: `bash -c 'shopt extglob'` có thể được viết là *bash -O extglob -c 'shopt extglob'*
user535733 avatar
lá cờ cn
`rm` là vĩnh viễn và không thể hoàn tác. Nếu bạn gặp rủi ro vì tệp cần giữ và tệp cần xóa được trộn lẫn với nhau, thì hãy triển khai các biện pháp kiểm soát quản lý rủi ro cơ bản: Tách các bước (sử dụng `tìm`) hoặc tách tệp thành các tệp tạm thời. Hoặc dành thời gian để xem từng tệp một. Đọc đầu ra của bạn một cách cẩn thận và kiểm tra những phát hiện của bạn trước khi xóa. Nó sẽ giúp bạn tiết kiệm nhiều nước mắt.
Điểm:7
lá cờ cn

Nó là tốt hơn và dễ dàng hơn để sử dụng tìm thấy chỉ huy:

tìm thấy . -type f -name "*.mp4" ! -name "*_notouch.mp4" -exec rm -v {} \;

Lệnh này sẽ khớp với bất kỳ tên tệp nào kết thúc bằng .mp4, nhưng không phải với _notouch.mp4 và sẽ chạy lệnh được đưa ra sau -exec.

Trước các hoạt động phá hoại như vậy, luôn luôn khôn ngoan khi chuẩn bị trước hoặc thay thế rừm lệnh với một tiếng vang và xác minh rằng bạn đang nhận được các lệnh mà bạn đang mong đợi:

tìm thấy . -type f -name "*.mp4" ! -name "*_notouch.mp4" -exec echo rm -v {} \;

[Chỉnh sửa] Như đã đề cập trong các ý kiến; trong trường hợp của bạn, bạn chỉ có thể sử dụng -in -xóa thay cho -exec echo rm -v {} \; (sẽ hiệu quả hơn nếu bạn có hàng triệu tệp). Và để liệt kê các tệp sẽ bị ảnh hưởng (trước khi chạy lệnh phá hoại), bạn chỉ cần chạy:

tìm thấy . -type f -name "*.mp4" ! -tên "*_notouch.mp4" (-in Là tùy chọn)

Ngoài ra, nếu bạn đừng muốn ảnh hưởng đến các thư mục con, bạn có thể sử dụng -độ sâu tối đa 1 tùy chọn như thế này:

tìm thấy . -maxdepth 1 -type f -name "*.mp4" ! -tên "*_notouch.mp4".

bac0n avatar
lá cờ cn
sử dụng tốt hơn `+` thay vì ```\;```
bac0n avatar
lá cờ cn
hoặc `find -type f -name '...' ... -print -delete`
Liso avatar
lá cờ sd
+1 Thủ thuật gọn gàng!
user535733 avatar
lá cờ cn
+1 vì đã dành thời gian để giải thích cách AN TOÀN để thực hiện việc này.

Đă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.