Xóa tập tin mà không hỏi


89

Làm cách nào để xóa tệp mà không hỏi người dùng nếu anh ta đồng ý xóa tệp? Tôi đang viết shell script và sử dụng hàm rm, nhưng nó yêu cầu "xóa tập tin thường xuyên?" và tôi thực sự không cần điều này. Cảm ơn bạn.


5
rm -f, yes | rmv.v., nhưng cái này thuộc về SU.

4
rmkhông hiển thị "xóa tệp thông thường?" nhắc nhở theo mặc định. Bạn phải đặt bí danh cho nó rm -i, hoặc được định nghĩa là một hàm. Tôi ngạc nhiên rằng bí danh có thể nhìn thấy trong tập lệnh của bạn. Bạn đang thực thi tập lệnh ( ./foo.sh) hoặc tìm nguồn cung ứng ( . foo.shhoặc source foo.sh)?
Keith Thompson

Câu trả lời:


102

Bạn có thể có rmbí danh để rm -ithử điều này:

/bin/rm -f file.log

Để xem bí danh của bạn, bạn có thể chạy alias.


7
Ngoài ra, sử dụng command rm ...hoặc \rm ...bỏ qua bí danh / chức năng
glenn jackman

6
Người ta đã tranh luận rằng có rmbí danh rm -ilà một ý tưởng tồi. Các rmlệnh, theo mặc định, âm thầm loại bỏ các tập tin có tên. Bằng cách đặt bí danh cho nó rm -i, bạn có thể có thói quen không kiểm tra cẩn thận trước khi nhấn Enter, tùy thuộc vào lời nhắc tương tác để cứu bạn. Sau đó, bạn gõ rm some-important-filevào một môi trường không có bí danh.
Keith Thompson

@Keith Điều đó rất đúng, tôi chỉ cá nhân bí danh rm đến rm -v
chown

1
Nếu "rm" là một hàm (thay vì bí danh), câu trả lời này sẽ hoạt động. Và unsetlệnh bash có thể thú vị
Xen2050

56

Cờ lực loại bỏ tất cả các lời nhắc;

rm -f {file}


2
Đây là những gì tôi đang tìm kiếm, không phải là câu trả lời được chấp nhận.
gsamaras

30

Mạnh mẽ lên - rm -f


5
Tôi đã nêu lên câu trả lời của các lynks, và điều này hoàn toàn giống nhau. Chỉ nâng cao cảm giác hài hước
rain_

Tôi ủng hộ cả bình luận VÀ câu trả lời chỉ vì ai đó thực sự tìm thấy sự hài hước trên SO ...
Mac

5

Trong tập lệnh shell, bạn sẽ muốn sử dụng rm -f <filename>nhưng bạn cũng có tùy chọn loại bỏ -itùy chọn ngầm cho môi trường của mình bằng cách nhập vào trình unalias rmbao (hoặc hồ sơ).


unalias rmkhông hoạt động trong CentOS? Amazon Linux?
Suncatcher

5

các yeschương trình liên tục trả lời có cho bất kỳ nhắc nhở. vì vậy bạn có thể đưa nó vào rmchương trình tương tác để đạt được hiệu quả mong muốn.

yes | rm <filename>

ngược lại, nếu bạn không muốn làm gì đó tương tác, bạn có thể làm

yes n | <something interactive>

và điều đó sẽ lặp lại 'n' trên luồng đầu vào (trả lời hiệu quả không cho câu hỏi)


Các yes ntùy chọn là không làm việc cho tôi. Trong khi tôi sử dụng yes n | rm file.txt, nó thực sự loại bỏ tệp mặc dù tệp được bảo vệ đúng.
iammilind 8/12/2015

5

Nếu bạn có quyền cần thiết để xóa tệp và bạn không muốn được nhắc, hãy làm như sau (-f = force):

rm -f file

Nếu bạn không có quyền đối với tệp, bạn sẽ cần sử dụng:

sudo rm -f file

1
"Loại bỏ tập tin thường xuyên?" nhắc nhở rằng nó không phải là một vấn đề quyền.
Keith Thompson

4
\rm file

Dấu gạch chéo ngược \bỏ qua bí danh.


1
"\" là dấu gạch chéo ngược, ý bạn là gì?
Cand3r

Có, để sử dụng rm mà không có bí danh dẫn đến tiền tố hộp thoại xác nhận không mong muốn với \.
teknopaul

1

Ngoài việc sử dụng -ftham số, thay findvào đó, bạn có thể sử dụng lệnh thay thế, ví dụ:

find -name file.log -delete

0

Hiện tại tôi đang làm việc tại một hệ thống, trong đó bash shell nhận định nghĩa của lệnh rm là một hàm trong một trong các tệp cấu hình toàn cầu:

 rm  () { /bin/rm -i ${1+"$@"}; }

Do đó, không có câu trả lời nào ở trên liên quan đến bí danh đã làm việc. Để chống lại hành vi gây phiền nhiễu, tôi bỏ đặt hàm rm trong tệp .bashrc của mình

 unset -f rm

Tôi đã có một vấn đề tương tự sau đó mở. Tuy nhiên tôi không tìm thấy câu trả lời nào đề cập đến khả năng rmbị ẩn bởi hàm shell. Vì vậy, tôi đã thêm câu trả lời ở đây với hy vọng nó sẽ giúp ích cho ai đó đang đối mặt với cùng loại vấn đề.

/bin/rmhoặc rm -ftất cả thời gian là bất tiện, và có thể có hậu quả xấu (trong trường hợp rm -f).


Điều đó có thể đã giải quyết vấn đề của bạn nhưng nó không trả lời câu hỏi.
suspectus

Sẽ không có câu trả lời được chọn - gọi /bin/rmcông việc? Nếu tôi có một hàm trong bash và một tệp thực thi có cùng tên trong thư mục hiện tại, chỉ cần thêm ./vào trước tên sẽ gọi tệp - không phải là hàm. Tái unset
bút

Vâng, /bin/rmlàm việc. Làm việc unsetloại bỏ sự cần thiết phải gõ đường dẫn đầy đủ.
daw

0

Nếu bạn rmcó bí danh rm -i, sau đó sử dụng unalias rm;

Không sử dụng rm -ftrực tiếp trừ khi bạn thực sự muốn xóa rất nhiều tệp được bảo vệ chống ghi. Phải có một lý do rất tốt để sử dụng -f.

Tuy nhiên, nếu bạn có nhiều tệp được bảo vệ chống ghi, bạn có thể thích rsync -r --delete empty/ removed_dir/tốc độ nhanh hơn.


0

Cách ưa thích của tôi để làm điều này chỉ đơn giản là sử dụng commandlệnh trong bash, giống như cách bạn sử dụng sudo. Điều này sẽ chạy lệnh của bạn mà không có bí danh, giống như chạy nó bằng /bin/rm(có thể rmlà bí danh là rm -i).

Thí dụ:

command rm -f /tmp/file.txt

0
rm -Rf <folder-to-be-deleted>

-R: đệ quy f: lực, không có dấu nhắc

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.