Bạn đã xóa (gần như) tất cả các thư mục nhà của bạn!
rm -r something
đệ quy xóa các tập tin và thư mục trong / dưới một cái gì đó ; nó sẽ chỉ thất bại đối với các mục mà nó không có quyền xóa, vì chúng thuộc sở hữu của một người dùng khác (ví dụ root
) hoặc do chúng đang được sử dụng (ví dụ: ngàm GVFS).
Nếu bạn không thêm -f
(như trong, rm -rf something
), bạn sẽ nhận được một cái gì đó như:
rm: remove write-protected regular file ‘something’?
rm: descend into write-protected directory ‘something’?
Tại thời điểm này, bạn có thể hủy bỏ và sau đó bạn có thể nhận ra rằng bạn đã thực hiện lệnh sai.
Gợi ý từ cộng đồng về cách tránh những tai nạn như vậy
Lưu ý: Cộng đồng wiki, mọi người vui lòng đóng góp.
Đối với một vài tệp, sử dụng -i
tùy chọn để nhận xác nhận về việc xóa tệp hoặc thư mục:
$ rm -ri something/
rm: remove regular file ‘something/file~’? y
rm: descend into directory ‘something’? y
rm: remove regular file ‘something/file’? y
rm: remove directory ‘something’? y
Nếu xóa khỏi thư mục hiện tại, hãy thêm tiền tố vào đó ./
để tránh xóa nhầm vị trí khác.
$ cd something
$ rm -v ./*~
removed ‘./file~’
Trên đây là để chứng minh việc sử dụng ./
. Nếu có thư mục con, tất nhiên bạn cũng có thể sử dụng rm -v something/*~
. Cẩn thận : đừng nghĩ rằng rm ./.*
loại bỏ tất cả các tập tin ẩn trong thư mục hiện tại. Xem câu hỏi Serverfault này để biết cách giải quyết trên các tập tin ẩn.
Di chuyển thay vì xóa: Thay vì xóa các tệp đệ quy ở nơi đầu tiên tôi đã sử dụng để di chuyển các tệp tôi muốn thoát khỏi một nơi khác trước khi tôi xóa chúng cuối cùng. Nếu có lỗi xảy ra, nó dễ dàng khôi phục.
mv -b SOURCE DEST
Sử dụng find
(có thể với grep
) để xem trước nếu bạn muốn xóa đệ quy các tệp đã chọn. Bạn nên cố gắng biến điều này thành một sự cố hiếm gặp, nhưng nếu bạn phải ...
find
không có đối số liệt kê đệ quy tất cả các tệp / thư mục theo cái hiện tại. Bạn nên cố gắng tìm kiếm man find
cách làm cho nó chọn lọc (một kho báu), nhưng nếu bạn không muốn làm phiền, bạn chỉ có thể sử dụng quen thuộc grep
để lọc các tệp bạn muốn xóa.
- Giả sử tôi là một hacker hạt nhân uber-l33t và bị làm phiền bởi một vài KB tệp "ví dụ" trong cây nguồn của tôi; Tôi muốn xóa tất cả các tập tin có chứa trong tên. Vì vậy, tôi gõ
find | grep example
, cung cấp cho tôi 20 tập tin. Điều đó có vẻ tốt, vì vậy bây giờ tôi đi và xóa các tệp chính xác đó, cùng với rm -v
đầu ra dài dòng được đề cập trước đây, thông qua xargs
:
tìm | ví dụ grep | xargs rm -v
cung cấp cho tôi đầu ra này. Việc xem trước như vậy ngăn ngừa các vấn đề trong đó nói, bạn tạo một lỗi đánh máy và gõ sample
thay vì example
.
Các giải pháp trên không nên được sử dụng nếu bạn có thể có tên tập tin chứa khoảng trắng, ký tự tab, dòng mới, hoặc dấu ngoặc kép ( "
hoặc '
), vì điều này sẽ dẫn xargs
đến một trong hai thất bại, hoặc thức ăn chăn nuôi rm
với tên tập tin không đầy đủ, mà trong trường hợp xấu nhất có thể sẽ loại bỏ các sai các tập tin. Cách an toàn để làm những điều trên là làm tất cả với find
các toán tử và hành động.
Sau đây sẽ hiển thị tất cả các tệp có chứa từ example
find . -name "*example*"
Nếu danh sách đó là các tệp bạn muốn xóa, hãy sử dụng -exec
hành động để chuyển các tệp tới rm
.
find . -name "*example*" -exec rm -v {} +
Xem Sử dụng Tìm để được trợ giúp thêm với việc sử dụng find
.