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 -rtù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 asau là 0 hoặc nhiều ký tự. Nó sẽ phù hợp với tên tập tin happy, apple, ahoặ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 -rfcuộ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 dotglobtrướ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 để rmbạn có thể thấy những gì sẽ bị xóa trước khi bạn bắt đầu.
GNU findnhư một -deletevị ngữ Nếu bạn vẫn muốn sử dụng -exec, thay thế \;bằng +sẽ tập hợp rmcá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 -rfcũ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ư /procv.v.).
-depthhay -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 -prunethư 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ừ subdirkhỏi việc xóa nội dung của nó.
-depthlá cờ findcho điều đó.
-deletevớifind ? -deletelà chiều sâu đầu tiên. Bạn đã giả sử không phải POSIX findvới -printf, vì vậy bạn cũng có thể sử dụng -deletehoặc-depth -print0 | xargs -0 rm
-not \( -path "$DIR/subdir" \)... nhưng tôi thì sao? Tại sao?
shopt -s dotglobtrước khi chạyrm (...)