Làm thế nào để hủy lệnh rm?


9

Có rất nhiều câu hỏi về cách hoàn tác một rm lệnh đã hoàn thành . Trong trường hợp của tôi, rm của tôi bắt đầu hỏi: "Bạn có chắc chắn muốn xóa tệp này?"

Và tôi cần xác nhận cho từng người trong số họ. Thay vì xác nhận thủ công "y / n":

  1. Tôi có thể đặt "có" cho phần còn lại trong khi được yêu cầu y / n cho tệp thứ n không? (tương đương với hộp kiểm "Có cho tất cả" trên Windows) (Tôi biết yes | rmmẹo trước khi bắt đầu)

  2. Tôi có thể hủy bỏ thao tác trong khi được yêu cầu y / n cho tệp thứ n không? (ngoại trừ tắt máy :))


10
Chỉ cần nhấn ctrl-c và bắt đầu lại? Btw, với -f nó không nên hỏi bạn bất cứ điều gì - đó là loại quan điểm của -f.
dùng253751

Bạn đã đúng, xóa "-f" khỏi tiêu đề câu hỏi của tôi.
Andrejs

Câu trả lời:


19

Để thực hiện yêu cầu 1, bạn sẽ cần sử dụng một chương trình phức tạp hơn là yesgửi yN số lần và sau đó chuyển đầu vào bàn phím đi qua đó. Bạn không thể làm điều đó rmngoại trừ luôn luôn hỏi ( rm -i) hoặc không bao giờ hỏi ( rm -f).

Bạn luôn có thể hủy bỏ rmbởi

  • nhấn Control-C để ngắt nó (gửi SIGINT),
  • nhấn Control-Z để dừng nó (gửi SIGSTOP) và sau đó giết nó,
  • gửi SIGTERM ( kill) hoặc
  • gửi nó một SIGKILL ( kill -9).

Điều này sẽ không hoàn tác bất kỳ thao tác tệp nào rmđã được thực hiện, nhưng họ sẽ ngăn không cho thực hiện bất kỳ thao tác tệp nào nữa. Nếu rmquy trình hiện đang nhắc nhở người dùng nhập vào thì nó không chủ động hủy liên kết bất kỳ tệp nào, vì vậy việc giết nó sẽ chỉ ngăn không cho nó tiếp tục.


Điều gì yes | head -9 | rm...để có được 9 (ví dụ) có?
Jeff Schaller

2
@JeffSchaller Điều đó sẽ đến lần thứ 9 mà không cần nhập liệu nhưng bạn sẽ không thể trả lời y / n cho ngày 10.
casey

1
Người ta có thể sử dụng { yes | head -n9; yes n; } | rm -i …để xóa 9 tệp đầu tiên, sau đó trả lời "không" cho bất kỳ tệp nào còn lại (và tất nhiên { … }phần này có thể được mở rộng để bao gồm bất kỳ tổ hợp số nào có thể).
zrajm

4
... mặc dù tôi không thấy những gì nó có thể hữu ích cho. Nếu bạn biết tập tin nào bạn muốn không thích / không được liên kết, tại sao không chuyển các đối số chính xác cho rmthay vì xây dựng các lệnh xoắn, không đáng tin cậy?
quang phổ

10

GNU rm hỗ trợ -i, mà tôi giả sử là những gì bạn đang đề cập và yêu cầu xác nhận cho mỗi tệp, nhưng cũng -Icó một chút khác biệt:

-I     prompt once before removing  more  than  three  files,  or  when
       removing  recursively.  Less intrusive than -i, while still giv‐
       ing protection against most mistakes

Về việc có thể dừng tương tác với rm sau khi nó bắt đầu hay không, nên nhấn Ctrl- Cnên làm điều đó.


2

với Ctrl+ cbạn sẽ có thể hủy thao tác.

Nhưng nếu bạn xem trong .bashrctệp của mình , bạn có thể nhận xét bí danh buộc xác nhận, nó sử dụng thông số -inhư là dhag đã hết hạn.

trong bạn .bashrcbạn sẽ tìm thấy một mục như thế này:

alias rm='rm -i'

nếu bạn bình luận, bạn rm -fsẽ làm việc trực tiếp


1

Trong đó bash, bạn có thể bỏ qua một bí danh bằng cách thêm một \lệnh vào, vì vậy

rm filename

trở thành

\rm filename

2
Tôi không thấy điều này có liên quan gì đến câu hỏi của tôi về "làm thế nào để làm gián đoạn quá trình rm"
Andrejs

@AndreyDoronin Nó giải quyết việc sử dụng các phương pháp của bạn như tôi biết yes | rmmẹo trước khi bắt đầu
Andrew Henle

@AndreyDoronin> nó cho biết làm thế nào để không phải hỏi làm thế nào để làm gián đoạn quá trình rm vì những lý do bạn đưa ra trong câu hỏi của mình.
quang phổ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.