Làm cách nào để xóa mọi thứ trong thư mục?


25

Làm cách nào để xóa mọi thứ trong một thư mục, bao gồm các tệp và thư mục ẩn?

Ngay bây giờ, tôi sử dụng như sau:

rm -rf *
rm -rf .*

5
Bạn có thể kết hợp chúng để rm -rf .* *.
người dùng không xác định

2
Bạn có thể đi lên một thư mục và sau đó chạyrm -rf yourdirectory/*
shreyansp

1
xin lỗi đã bỏ lỡ phần thư mục ẩn. Giải pháp người dùng trước đó bao gồm điều đó
shreyansp

Đó là lựa chọn thứ hai bạn đăng rất nguy hiểm. Nó sẽ phù hợp với ..thư mục, sẽ xóa bất cứ thứ gì trong thư mục trên .
Richard Peterson

Câu trả lời:


17

Đơn giản và thẳng tiến:

find -delete 

Bao gồm các thư mục và các tập tin ẩn. Ít nhất gnu-find biết -delete, bạn findcó thể khác.


1
Để tránh xóa thư mục, sử dụng find /path -delete -mindepth 1.
orodbhen

@orodbhen: find -delete sẽ không xóa thư mục, nơi bạn khởi chạy lệnh (như trong câu hỏi với rm).
người dùng không xác định

11

Câu trả lời tốt nhất là: Đừng làm điều đó. Đệ quy loại bỏ thư mục chính nó, sau đó tạo lại nó như một thư mục trống. Người khác đáng tin cậy và dễ hiểu hơn những gì bạn đang cố gắng làm. Khi bạn tạo lại thư mục, nó có thể có chủ sở hữu, nhóm và quyền khác nhau. Nếu đó là những điều quan trọng hãy cẩn thận. Ngoài ra, nếu bất kỳ chương trình đang chạy nào có xử lý tệp mở (mô tả) trên thư mục thì bạn sẽ không muốn xóa nó. Nếu không có trường hợp đặc biệt nào được áp dụng, thì việc xóa toàn bộ thư mục sẽ đơn giản hơn.


7
Vì vậy, làm thế nào là dễ dàng hơn. "Hãy cẩn thận" không phải là một câu trả lời. Tôi sẽ không hiểu tại sao ai đó xóa một thư mục và xây dựng lại nó.
người dùng không xác định

Tôi đã thêm cụm từ "như một thư mục trống", có lẽ điều đó rõ ràng hơn.
Chris Quenelle

2
Không, nó không giải thích lý do tại sao bạn xóa một thư mục và tạo lại nó sau đó. Đối với những điều cần xem xét thuộc về, btw., Ngày / thời gian sáng tạo quá.
người dùng không xác định

2
Nếu thư mục đó là thư mục làm việc hiện tại của một số quy trình, bạn có thể gặp vấn đề. Ngoài ra, nếu bạn xóa thư mục, bạn sẽ xóa thông tin về quyền và quyền sở hữu của nó.

8
rm -rf -- * .[!.]* ..?*

Mỗi mô hình trong số ba mô hình sẽ tự mở rộng nếu nó không khớp với nhau, nhưng đó không phải là vấn đề ở đây vì chúng tôi muốn khớp mọi thứ và rm -fbỏ qua các đối số không tồn tại.

Lưu ý rằng .*sẽ phù hợp.. .


5

Giả sử bash 4+:

shopt -s dotglob
rm -rf -- *
##or:
rm -rf ./*

Khi dotglob được bật, *mở rộng ra tất cả các tệp và thư mục, ngay cả những tệp bắt đầu bằng .- nhưng không mở rộng sang ...vì vậy nó an toàn khi sử dụng rm.


2

nếu bạn đang ở trong thư mục:

cd .. && rm -rf dir && mkdir dir && cd dir

nếu không thì:

rm -rf /path/to/dir && mkdir /path/to/dir


2

Ôi trời ơi

rm -rf (.|)*

Một lần nữa, điều này chỉ dành cho Zsh.


2
Hoặc *(D)( Dvòng loại toàn cầu bật glob_dotstùy chọn cho mẫu này).
Gilles 'SO- ngừng trở nên xấu xa'

Hoặc rm -rf {.,}*(không giống như bash, zsh không bao gồm ...vào {.,}*, ít nhất là trên máy của tôi).
sasha

1

Làm thế nào về việc sử dụng find. Tôi nghĩ rằng đây thường là một lựa chọn tốt, khi bạn phải tìm hiểu các thư mục con.

find . -type f -exec rm {} \;

1
có một chuyển đổi -delete, vì vậy bạn có thể xóa các thư mục. (ít nhất là trong gnu-find).
người dùng không xác định

điều này sẽ không xóa các thư mục con
sasha

-2

Hãy thử rm -rf *?*. Điều này sẽ xóa các tập tin bình thường và ẩn.


4
Không phải trong bất kỳ vỏ mà tôi biết.
Gilles 'SO- ngừng trở nên xấu xa'

bạn nói đúng. nó không xóa các thư mục con.
joyimdim

4
Vấn đề có nhiều khả năng là nó *?*sẽ không khớp với các tập tin / thư mục của dot dot (trừ khi bạn đã bật dotglobtùy chọn trong bash , GLOB_DOTStùy chọn trong zsh hoặc tương đương với bất kỳ shell nào bạn đang sử dụng).
Chris Johnsen
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.