Gần nhất tôi đã nhận được là
# rm /path/to/directory/*.*
nhưng nó không hoạt động đối với các tệp không có tiện ích mở rộng ...
Gần nhất tôi đã nhận được là
# rm /path/to/directory/*.*
nhưng nó không hoạt động đối với các tệp không có tiện ích mở rộng ...
Câu trả lời:
Linux không sử dụng các phần mở rộng. Tùy thuộc vào người tạo tệp để quyết định xem anh ta có muốn tên đó có phần mở rộng hay không. Linux nhìn vào byte thứ 1 để tìm ra loại tệp nào đang xử lý.
Để xóa mọi thứ trong thư mục, hãy sử dụng:
rm /path/to/directory/*
Bạn có thể sử dụng -r
tùy chọn, ví dụ:
rm -r /path/to/directory/*
để xóa bất kỳ thư mục con nào (cùng với tất cả nội dung của chúng) trong thư mục bạn đang xóa nội dung của. Nếu không, nó sẽ hiển thị một lỗi thông báo cho bạn rằng nó không xóa thư mục.
all files
;) *.*
có nghĩa là tất cả các tệp có chứa một .
nơi nào đó trong tên
*a*
có nghĩa là không hoặc nhiều ký tự, theo a
sau là 0 hoặc nhiều ký tự. Nó sẽ phù hợp với tên tập tin happy
, apple
, a
hoặc la
.
Để xóa thư mục có tất cả nội dung của nó ( bao gồm tất cả các thư mục bên trong ):
rm -rf /path/to/directory
Để xóa tất cả nội dung của thư mục ( bao gồm tất cả các thư mục bên trong ) nhưng không xóa chính thư mục đó:
rm -rf /path/to/directory/*
hoặc là
rm -rf /path/to/directory/{*,.*}
nếu bạn muốn đảm bảo rằng các tập tin / thư mục ẩn cũng bị xóa.
Để xóa tất cả các "tệp" từ bên trong một thư mục ( không xóa các thư mục bên trong ):
rm -f /path/to/directory/{*,.*}
Cảnh báo : nếu bạn có khoảng trắng trong đường dẫn, hãy đảm bảo luôn sử dụng dấu ngoặc kép.
rm -rf /path/to the/directory/*
tương đương với 2 rm -rf
cuộc gọi riêng biệt :
rm -rf /path/to
rm -rf the/directory/*
Để tránh vấn đề này, bạn có thể sử dụng '
dấu ngoặc đơn '
( không mở rộng biến shell) hoặc "
dấu ngoặc kép "
( mở rộng biến shell):
rm -rf "/path/to the/directory/"*
Ở đâu:
rm
- là viết tắt của " loại bỏ "-f
- là viết tắt của " lực lượng " hữu ích khi bạn không muốn được hỏi / nhắc nếu bạn muốn xóa một kho lưu trữ, chẳng hạn.-r
- là viết tắt của " đệ quy " có nghĩa là bạn muốn đi đệ quy xuống mọi thư mục và xóa mọi thứ.rm -rf /path/to/directory/*
không xóa một tập tin ẩn trong thư mục, vd .htaccess
. Có lẽ rm -rf /path/to/directory/.
nào? Không thử nó.
rm -rf /path/to/directory/.*
chỉ xóa (các) tệp ẩn trong thư mục được chỉ định. Nhìn vào nhận xét của @ danjjl về câu trả lời của @ Rinzwind, để xóa các tệp bị ẩn, hãy chạy shopt -s dotglob
trước khi chạy rm -rf /path/to/directory/*
.
rm -rf /path/to/directory/.*
trên hệ thống của tôi gây ra việc xóa các mục trong /path/to
. May mắn thay, tôi vừa sao lưu toàn bộ dữ liệu của mình vào một đĩa riêng. Không cần phải nói, KHÔNG phát lệnh rm -rf /path/to/directory/.*
trừ khi bạn đã sao lưu toàn bộ máy tính của mình vào một vị trí riêng biệt / an toàn!
Để xóa tất cả các tệp trong thư mục (bao gồm các tệp ẩn và thư mục con) hãy chạy:
rm -rf /path/to/directory/{*,.*}
./
và ../
, nhưng nó vẫn sẽ xóa các tập tin ẩn.
rm -r $(pwd)/{*,.*}
Nếu bạn chỉ muốn xóa các tệp trong thư mục / path / to /, bạn có thể làm
find /path/to/directory -type f -print0| xargs -0 rm
hoặc là
find /path/to/directory -type f -exec rm '{}' \;
Bạn có thể tải với find
, lợi thế là bạn có thể liệt kê những gì được tìm thấy mà không cần đường ống để rm
bạn có thể thấy những gì sẽ bị xóa trước khi bạn bắt đầu.
GNU find
như một -delete
vị ngữ Nếu bạn vẫn muốn sử dụng -exec
, thay thế \;
bằng +
sẽ tập hợp rm
các cuộc gọi lại với nhau, tăng hiệu quả.
Để xóa tất cả các tệp và thư mục (bao gồm cả các tệp ẩn ) trong một thư mục, bạn có thể thử các cách sau:
xóa thư mục, sau đó tạo lại nó
rm -rf dir_name && mkdir dir_name
sử dụng find
find dir_name -mindepth 1 -delete
Ở đây chúng tôi chỉ định -mindepth 1
để loại trừ thư mục dir_name chính nó.
Hãy xem liên kết sau:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory
Nếu bạn cũng muốn xóa tất cả các thư mục con và thư mục chính nó, bạn có thể sử dụng rm -rf /path/to/directory
. Nhưng luôn luôn kiểm tra kỹ dòng của bạn trước khi nhấn return, rm -rf
cũng có thể gây ra nhiều havock, ví dụ: nếu bạn vô tình chèn một khoảng trắng sau dấu gạch chéo đầu tiên trong khi có quyền siêu người dùng ...
Vì câu hỏi này liên tục đứng đầu Google khi tôi tự tìm kiếm câu hỏi này:
Các câu trả lời khác bị các vấn đề khác nhau:
Một số trong số họ bao gồm .
và ..
đó là ồn ào, khó hiểu và gây phiền nhiễu.
Một số trong số họ quên các tệp ẩn (các tệp bắt đầu bằng dấu chấm).
Họ không xóa theo thứ tự chính xác (sâu nhất trước tiên) để cho phép xóa thư mục.
Họ đi xuống các hệ thống tập tin (gắn kết) khác, thường không mong muốn.
Chúng rất khó để mở rộng đúng cách với các tham số bổ sung (nhiều hơn ở bên dưới).
find "${DIR}" -xdev -mindepth 1 -printf "%d\t%y\t%p\0" | sort -z -r -n | cut -z -f3- | xargs -0 -r -- rm -d --
Lưu ý rằng tôi đã thêm một -xdev
đối số để ngăn giảm dần vào mount (như /proc
v.v.).
-depth
hay -delete
?Mặc dù mọi người liên tục hạ thấp tôi vì điều này, những phương pháp đó có một nhược điểm: có vẻ như chúng không đủ khả năng mở rộng để cho phép sử dụng -prune
thư mục con (mà không đưa ra nhiều vấn đề hơn). Ngược lại với phương pháp này, bạn có thể chèn
-not \( -path "${DIR}/subdir" -prune \)
trước -mindepth
đối số để loại trừ subdir
khỏi việc xóa nội dung của nó.
-depth
lá cờ find
cho điều đó.
-delete
vớifind
? -delete
là chiều sâu đầu tiên. Bạn đã giả sử không phải POSIX find
với -printf
, vì vậy bạn cũng có thể sử dụng -delete
hoặc-depth -print0 | xargs -0 rm
-not \( -path "$DIR/subdir" \)
... nhưng tôi thì sao? Tại sao?
shopt -s dotglob
trước khi chạyrm (...)