Tôi biết điều này sẽ xóa mọi thứ trong một thư mục con và bên dưới nó:
rm -rf <subdir-name>
Nhưng làm cách nào để bạn xóa mọi thứ trong thư mục hiện tại cũng như mọi thư mục con bên dưới nó và nội dung của tất cả các thư mục con đó?
Tôi biết điều này sẽ xóa mọi thứ trong một thư mục con và bên dưới nó:
rm -rf <subdir-name>
Nhưng làm cách nào để bạn xóa mọi thứ trong thư mục hiện tại cũng như mọi thư mục con bên dưới nó và nội dung của tất cả các thư mục con đó?
Câu trả lời:
Thực hành tính toán an toàn. Chỉ cần tăng một cấp độ trong hệ thống phân cấp và không sử dụng biểu thức ký tự đại diện:
cd ..; rm -rf -- <dir-to-remove>
Hai dấu gạch ngang --
cho biết rm
đó <dir-to-remove>
không phải là một tùy chọn dòng lệnh, ngay cả khi nó bắt đầu bằng dấu gạch ngang.
rm ./
bạn có thể vô tình gõ rm . /
và có thể là thảm họa.
Sẽ xóa tất cả các tệp / thư mục bên dưới tệp hiện tại.
find -mindepth 1 -delete
Nếu bạn muốn làm điều tương tự với một thư mục khác có tên của bạn, bạn có thể đặt tên đó
find <name-of-directory> -mindepth 1 -delete
Nếu bạn muốn xóa không chỉ các thư mục con và tệp của nó, mà còn cả chính thư mục, hãy bỏ qua -mindepth 1
. Làm điều đó mà không -delete
có danh sách những thứ sẽ bị loại bỏ.
-mindepth 1
nếu bạn đang chỉ định một thư mục ( find <name-of-directory> -mindepth 1 -delete
). Nếu không thì Johannes nói đúng nó sẽ không xóa thư mục làm việc hiện tại (khi sử dụng find -delete
).
find -mindepth 1 -delete
nhưng tôi nhận được illegal option -- m
nhưng nó hoạt động tuyệt vời khi tôi loại bỏ tùy chọn mindepth find . -delete
Điều tôi luôn làm là gõ
rm -rf *
và sau đó nhấn ESC- * và bash sẽ mở rộng * thành một danh sách rõ ràng các tệp và thư mục trong thư mục làm việc hiện tại.
Những lợi ích là:
Trên thực tế, tôi thích điều này đến nỗi tôi đã đặt nó làm hành vi mặc định cho TAB với dòng này trong .bashrc:
bind TAB:insert-completions
--
trong câu trả lời này? Tôi phải nói cách tiếp cận này là tuyệt vời.
Sử dụng
rm -rf *
Cập nhật: Viết .
tắt của thư mục hiện tại, nhưng chúng tôi không thể sử dụng nó. Lệnh này dường như có các kiểm tra rõ ràng đối với .
và..
. Thay vào đó, hãy sử dụng ký tự đại diện cầu vồng. Nhưng điều này có thể rủi ro.
IMO phiên bản an toàn hơn được sử dụng:
rm -ri *
(điều này sẽ nhắc bạn xác nhận trước khi xóa mọi tệp / thư mục.)
Đúng là rm –rf .
sẽ xóa mọi thứ trong hiện tại trực tiếp bao gồm mọi thư mục con và nội dung của chúng. Các dấu chấm đơn ( .
) có nghĩa là thư mục hiện hành. cẩn thận không nên làm rm -rf ..
vì dấu chấm kép ( ..
) có nghĩa là thư mục trước đó.
Điều này đang được nói, nếu bạn giống tôi và có nhiều cửa sổ đầu cuối mở cùng một lúc, tốt hơn bạn nên an toàn và sử dụng rm -ir .
Hãy xem các đối số lệnh để hiểu tại sao.
Đầu tiên, nếu bạn nhìn vào trang rm
command man ( man rm
trong hầu hết Unix), bạn sẽ thấy điều đó –r
có nghĩa là "loại bỏ nội dung của các thư mục một cách đệ quy". Vì vậy, làm rm -r .
một mình sẽ xóa tất cả mọi thứ trong thư mục hiện tại và mọi thứ bên dưới nó.
Trong rm –rf .
-f được thêm vào có nghĩa là "bỏ qua các tệp không tồn tại, không bao giờ nhắc". Lệnh đó sẽ xóa tất cả các tệp và thư mục trong thư mục hiện tại và không bao giờ nhắc bạn xác nhận rằng bạn thực sự muốn làm điều đó. -f
đặc biệt nguy hiểm nếu bạn chạy lệnh dưới quyền người dùng đặc quyền vì bạn có thể xóa nội dung của bất kỳ thư mục nào mà không có cơ hội đảm bảo đó thực sự là thứ bạn muốn.
Trên otherhand, trong rm -ri .
những -i
điều đó thay thế -f
có nghĩa là "lời nhắc trước khi loại bỏ bất kỳ". Điều này có nghĩa là bạn sẽ có cơ hội nói "oups! Đó không phải là điều tôi muốn" trước khi rm vui vẻ xóa tất cả các tệp của bạn.
Trong những ngày đầu sử dụng sysadmin, tôi đã thực hiện rm -rf /
trên một hệ thống trong khi đăng nhập với đầy đủ các đặc quyền (root). Kết quả là sau hai ngày khôi phục hệ thống từ các bản sao lưu. Đó là lý do tại sao bây giờ tôi rm -ri
đang làm việc.
đảm bảo bạn đang ở đúng thư mục
rm -rf *
Tôi tin rằng câu trả lời này tốt hơn:
/unix/12593/how-to-remove-all-the-files-in-a-directory
Nếu thư mục cấp cao nhất của bạn được gọi
images
, thì hãy chạyrm -r images/*
. Điều này sử dụng toán tử shell global*
để chạyrm -r
trên mọi tệp hoặc thư mục trong hình ảnh.
về cơ bản, bạn lên một cấp, sau đó nói xóa mọi thứ bên trong thư mục X. Bằng cách này, bạn vẫn đang chỉ định thư mục nào sẽ bị xóa nội dung của nó, điều này an toàn hơn là chỉ nói 'xóa mọi thứ ở đây', trong khi vẫn giữ nguyên thư mục gốc, (đôi khi bạn muốn vì không được phép hoặc không muốn để sửa đổi các quyền hiện có của thư mục)