2012-04-20 17 views
99

Tôi đang sử dụng rm trong tập lệnh BASH để xóa nhiều tệp. Đôi khi các tập tin không có mặt, do đó, nó báo cáo nhiều lỗi. Tôi không cần thông báo này. Tôi đã tìm kiếm trang người đàn ông để có lệnh làm cho an toàn là rm, nhưng tùy chọn duy nhất tôi tìm thấy là -f, từ mô tả "bỏ qua các tệp không tồn tại, không bao giờ nhắc", có vẻ là lựa chọn đúng, nhưng tên để phù hợp, vì vậy tôi lo ngại nó có thể có hậu quả ngoài ý muốn.Làm thế nào để ngăn chặn rm báo cáo rằng một tập tin không được tìm thấy?

  • Tùy chọn -f có đúng cách để tắt tiếng rm? Tại sao nó không được gọi là -q?
  • Tùy chọn này có làm gì khác không?
+0

bạn không muốn sử dụng -f, nó sẽ xóa tệp bạn đã đánh dấu là chỉ đọc. – pizza

Trả lời

136

Việc sử dụng chính của -f là để buộc các loại bỏ các tập tin đó sẽ không thể được gỡ bỏ bằng rm bởi chính nó (như là một trường hợp đặc biệt, đó là "loại bỏ" file không tồn tại, vì vậy ngăn chặn các thông báo lỗi).

Bạn cũng có thể chỉ cần chuyển hướng được thông báo lỗi sử dụng

$ rm file.txt 2> /dev/null 

(hoặc hệ điều hành của bạn tương đương). Bạn có thể kiểm tra giá trị $? ngay sau khi gọi rm để xem tệp có thực sự bị xóa hay không.

+3

'--f' hợp lệ đối với GNU Coreutils' rm', nhưng chỉ vì nó là chữ viết tắt duy nhất cho '--force'. Dạng ngắn '-f' rõ ràng và dễ cầm hơn. –

+0

Không chắc tôi thậm chí còn nhận ra điều đó. '--f' ở đây chỉ là lỗi đánh máy cho' -f'. – chepner

+3

bất kỳ lý do nào bạn không khắc phục lỗi đánh máy ??? Tôi sẽ sửa chữa nó ... – iconoclast

44

Có, -f là tùy chọn phù hợp nhất cho việc này.

+0

Một số hệ thống sẽ nhắc bạn khi phòng ngay cả với -f cho đến khi bạn sử dụng dấu gạch chéo ngược. – vimdude

+6

@vimdude: Nó không phải là "một số hệ thống"; hành vi đó chỉ ra rằng bạn có một hàm hoặc bí danh vỏ mà ánh xạ 'rm' thành' rm -i'. –

+0

@KeithThompson true – vimdude

3

As far as rm -f làm "bất cứ điều gì khác", nó có hiệu lực (-f là viết tắt cho --force) loại bỏ im lặng trong tình huống mà rm nếu không sẽ hỏi bạn để xác nhận. Ví dụ: khi cố xóa một tệp không thể ghi được từ bạn khỏi thư mục có thể ghi được bởi bạn.

8

\rm -f file sẽ không bao giờ báo cáo không tìm thấy.

+2

-r là không cần thiết và nguy hiểm. – mahemoff

+1

Tôi giả định nhiều tệp hoặc thư mục. Đọc lại yêu cầu của người dùng và bạn nói đúng là anh ấy chỉ yêu cầu các tệp. Vì vậy, sửa chữa câu trả lời của tôi – vimdude

+0

dấu gạch chéo ngược trước khi rm làm là gì ?? các bạn có cần câu trả lời không.Trên windows cygwin's làm cho phiên bản 4.1 không thể đối phó với \ rm trong khi 3,75 hoạt động tốt. –

16

-f là lá cờ đúng, nhưng đối với các nhà điều hành kiểm tra, không rm

[ -f "$THEFILE" ] && rm "$THEFILE" 

này đảm bảo rằng các tập tin tồn tại và là một tập tin bình thường (không phải là một thư mục, thiết bị nút vv ...)

+2

Tuy nhiên, điều này có một điều kiện chủng tộc, và không nên được sử dụng trong các kịch bản sản xuất. – tripleee

+1

Vì vậy, những gì nên? – mmlac

-1

Tôi có cùng một vấn đề với cshell. Giải pháp duy nhất tôi có là tạo một tệp giả mạo phù hợp với mẫu trước "rm" trong tập lệnh của tôi.

+4

Đó thực sự là giải pháp * duy nhất *? Bạn đã thử 'rm -f' hay' rm filename> &/dev/null'? –