Cách tránh sự cố cần phát hành y y y nhiều lần khi xóa tệp được bảo vệ


52

Tôi đang tìm kiếm một giải pháp được sử dụng như một phản hồi cho "rm: xóa tệp thông thường được bảo vệ ghi [x]?"

Tôi đã nghĩ đến việc phát hành một nhân vật theo sau là vận chuyển trở lại trong một số lần, trong bashrc. làm sao chúng ta làm việc đó bây giờ?


Bạn có thể định nghĩa một chức năng. Điều này có thể giúp bạn: stackoverflow.com/questions/756756/ .
alpert

tại sao bạn muốn làm việc này? Đó là một nhiệm vụ rất không rõ ràng khi muốn in trả lại vận chuyển (trái ngược với dòng mới) trong mọi trường hợp và trong .bashrc?
l0b0

@ l0b0 câu hỏi được chỉnh sửa để cụ thể hơn
Iancovici

Tại sao bạn muốn xóa tệp trong .bashrc? Nhiệm vụ ban đầu vẫn chưa rõ ràng.
l0b0

3
@echadromani Rất phổ biến trên SO / SE để cố gắng hiểu vấn đề ban đầu để cung cấp một giải pháp tối ưu có thể áp dụng cho các tình huống khác.
l0b0

Câu trả lời:


75

Chỉnh sửa dựa trên câu hỏi cập nhật:

Để tránh bị hỏi về việc xóa tệp, hãy thêm -ftùy chọn ("bắt buộc"):

rm -f /path/to/file

Điều này có một tác dụng phụ mà bạn cần lưu ý: Nếu bất kỳ đường dẫn cụ thể nào không tồn tại, nó sẽ không báo cáo điều này và nó sẽ trở lại thành công:

$ rm -f /nonexistent/path
$ echo $?
0

Câu trả lời gốc:

Đây là một giải pháp đơn giản:

yes "$string" | head -n $number | tr $'\n' $'\r'

yeslặp lại bất kỳ chuỗi nào bạn cung cấp cho nó vô tận, cách nhau bởi dòng mới. headdừng nó sau $numberthời gian, và trdịch các dòng mới để trở về vận chuyển. Bạn có thể không thấy bất kỳ đầu ra nào vì vận chuyển trở lại, nhưng chuyển nó tới lệnh này (in bash) sẽ minh họa cho nó:

printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"

Người dùng mà không bashcan ống kết quả đến od, hexdumphoặc xxdđể xem các nhân vật thực tế trả lại.


7

Vấn đề khác thỉnh thoảng tôi gặp phải rmlà bí danh rm -i, một cái gì đó như thế này trong / etc / bashrc:

alias rm='rm -i'

Trong trường hợp đó, bạn có thể unalias rmhoặc bạn có thể sử dụng thủ thuật mà tôi đã phát hiện ra cách đây nhiều năm, đặt dấu gạch chéo ngược trước lệnh được đặt bí danh, để bỏ qua bí danh chỉ một lần, ví dụ:

\rm somefile

Bạn có thể tìm hiểu thêm về bí danh thông qua một bài viết tại Nixcraft .


5

rmđược mã hóa cứng để hỏi "tương tác" (nhắc nhở người dùng nhập liệu) vào các tệp được bảo vệ. Có hai phương pháp để ngăn chặn rmyêu cầu:

rm -rf somedir

rm -r --interactive=never somedir

(cả hai cũng hoạt động mà không -rkhi xóa tệp thay vì thư mục)

giải trình:

-flàm rmcho "bỏ qua các tệp và đối số không tồn tại, không bao giờ nhắc".

--interactive=neverlàm những gì nó nói: không bao giờ được tương tác. nói cách khác: không bao giờ nhắc.

sự khác biệt giữa -f--interactive=neverlà phần này: "bỏ qua các tệp và đối số không tồn tại".

so sánh:

$ rm -rf nonexistingname
$ echo $?
0

$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1

sự khác biệt chủ yếu là thú vị khi viết các kịch bản mà bạn không bao giờ muốn rmtương tác nhưng vẫn muốn xử lý lỗi.

tóm tắt: về việc sử dụng dòng lệnh rm -rf. trong kịch bản sử dụng rm -r --interactive=never.


để biết câu trả lời cho câu hỏi đã nêu ("Cách tránh sự cố cần thiết phải xử lý nhiều lần khi xóa tệp được bảo vệ"), hãy xem https://askubfox.com/questions/338857/automatically-enter-input-in-command-line / 338860 # 338860


1

chỉ cần đưa ra có cho tất cả các lệnh của bạn!

yes | rm -r /path/
yes | <command>

Dù sao, bạn luôn có thể buộc sử dụng -f:

rm -r -f /path

-2

Tôi cũng chạy vào vấn đề tương tự. Câu trả lời trên chỉ dành cho một tập tin nhưng nếu bạn muốn bỏ qua rất nhiều có.

Bạn có thể dùng

sudo rm -r /path/to/directory

để xóa tất cả ghi tập tin thường xuyên được bảo vệ


Điều này đang được hạ cấp bởi vì nó loại bỏ toàn bộ thư mục. Có lẽ OP chỉ muốn xóa tệp đang đề cập, không phải mọi tệp đơn lẻ trong cùng thư mục con.
Jake

Này .... Có thể bạn đúng.
Gopal Prasad

Này .... Có thể bạn đúng. Nhưng không phải trong trường hợp này .. Như thể một người dùng có nhiều kiên nhẫn và thời gian, thì anh ta cũng có thời gian để đưa ra 'có' vài lần ... Tôi đã giả định rằng anh ta muốn xóa tất cả tệp bằng một lệnh .. Như viết tệp được bảo vệ luôn yêu cầu xác nhận trước khi xóa loại tệp này .. Một ví dụ như vậy là trong trường hợp khi bạn tạo virtualenv và sau đó bạn muốn xóa trong python .. Vui lòng thử và bạn sẽ thấy lệnh rm yêu cầu xác nhận và mỗi lần bạn phải cung cấp một câu trả lời .. Tôi đã giải quyết tình huống theo cách này.
Gopal Prasad
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.