Nói 'có với tất cả' bằng cách sử dụng rm -i


10

Nói rằng tôi muốn đảm bảo rằng tôi đã xóa đúng tệp trước tiên, vì vậy tôi đã làm một cái gì đó như:

rm -i *

chỉ để đảm bảo rằng tôi ổn với các tệp mà tôi đang xóa. Vì vậy, điều này sẽ yêu cầu tôi cho mỗi tập tin. Sau một vài tệp, giả sử tôi nhận ra đó chính xác là những gì tôi muốn xóa. Thay vì CTRL+Cing và chỉ làm rm *, có cách nào tôi có thể nói Có với tất cả không?

Câu hỏi này xuất phát nhiều hơn từ sự tò mò hơn là chức năng.


Câu hỏi kỳ lạ, nhưng dù sao đi nữa, hãy sáng tạo trong câu trả lời của chúng tôi!
heo

Câu trả lời:


8

Không.

(Trừ khi bạn tìm cách lật bit 'tương tác' với trình gỡ lỗi.)


[cần dẫn nguồn] :-)
Daniel Beck

6
@Daniel: coreutils/src/remove.c:335coreutils/lib/yesno.c:46(tạo ra) → rpmatch(3): "trả về 0 cho một phản ứng tiêu cực được công nhận (" không "), 1 cho một phản ứng tích cực được công nhận (" yes "), và -1 khi giá trị của phản ứng là không được công nhận"
user1686

Rất đẹp tìm thấy!
Daniel Beck

3
Ngoài ra, bạn chỉ có thể dán số lượng lớn y [ngắt dòng] vào thiết bị đầu cuối, đây không phải là "Có cho tất cả", nhưng điều tương tự cũng xảy ra.
Olli

haha đúng với điều 'y [linebreak]', tôi thích nó! :)
Amit

9

Vâng, điều này không thực sự trả lời câu hỏi của bạn. Nhưng thay vì sử dụng rm -i, hãy xem xét bí danh rmđể rm -I:

Trang người đàn ông nói:

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

trong của bạn ~/.bashrc, đặt:

 alias rm='rm -I'

Điều này thực sự hữu ích!


4

Có cách nào tôi có thể nói Có với tất cả không?

Câu trả lời là có, sử dụng mã này:

$ yes "yes" | rm -vRI directory

  • v: hiển thị danh sách các tập tin đã bị xóa
  • R: xóa thư mục và nội dung của chúng theo cách đệ quy
  • I: theo khuyến nghị ở trên.

3

Chỉ cần kiểm tra đầu tiên bằng cách sử dụng ls *.blavà sau đó rm -f *.blacó thể?

Sử dụng thận trọng!


haha đúng đây là một khả năng
Amit

3

Nếu bạn đang chạy trên màn hình (một ý tưởng hay nói chung), bạn có thể làm:

ctrl-a : exec .! yes y

Điều này sẽ khiến màn hình chạy lệnh 'có' với y là đầu ra và đầu ra được nói trực tiếp cho chương trình đang chạy (rm -i).


2

Điều này có thể được thực hiện bằng cách thay thế các mô tả tập tin ứng dụng một cách nhanh chóng. Bạn sẽ cần một tập tin trung gian mặc dù.

Bạn có thể sử dụng gdb và một đường ống có tên như thế này (giả sử bạn đang sử dụng nhiều thiết bị đầu cuối hơn, nếu không bạn phải sử dụng màn hình hoặc thứ gì khác):

  • tạo một đường ống có tên với "mkfifo myYesYesPipe"
  • bắt đầu bản sao tương tác với rm -i và tìm PID của nó
  • mở gdb

Sau đó nhập các lệnh sau trong gdb, thay thế PID

attach rmPID
call open("/path/to/myYesYesPipe",66,0666)
call dup2(3,0)
call close(3)
detach
quit

Điều này thay thế bàn phím bằng một ống có tên cho rm.

Bây giờ bạn phải điền vào đường ống được đặt tên

  • chạy có> / đường dẫn / đến / myYesYesPipe

rm sẽ đọc đường ống và ghi đè lên mọi thứ.


@grawity. bạn đã truyền cảm hứng cho tôi để sử dụng trình gỡ lỗi.
David Costa

1
  1. Đặt rmquá trình trong nền với Ctrl+Z.
  2. Nhớ lại lệnh cuối cùng ( rm -i *lệnh)
  3. Gỡ bỏ -i
  4. Enter để chạy lệnh
  5. fg %1
  6. Ctrl+C

3
5s/fg/kill/; 6d
dùng1686

3
Làm thế nào điều này tốt hơn những gì người dùng đề cập rõ ràng mà anh ta không muốn làm?
Daniel Beck
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.