Làm thế nào để loại bỏ tất cả các tập tin từ một mục?

Gần nhất tôi đã nhận được là

# rm /path/to/directory/*.*

nhưng điều đó không làm việc cho các tập tin rằng không có một mở rộng...

Linux không sử dụng mở rộng. Nó là những người sáng tạo của các tập tin để quyết định xem tên nên có một mở rộng. Linux nhìn đầu tiên vài nội để tìm ra những loại tập tin nó là đối phó với.

  • Để loại bỏ tất cả không tập tin* trong một mục sử dụng:

    rm /path/to/directory/*

    Tuy nhiên, điều này sẽ cho một lỗi cho mỗi tiểu thư mục, bởi vì trong trạng thái này, nó là chỉ được phép để xóa các tập tin.

  • Để loại bỏ tất cả các người không tập tin và tiểu thư (cùng với tất cả nội dung của họ) trong một mục sử dụng:

    rm -r /path/to/directory/*

* Tập tin và đạt được những người có tên bắt đầu với . (chấm) nhân vật, ví dụ như:: .hidden-file hay .hidden-directory/. Lưu ý rằng, Bash, nếu dotglob lựa chọn (đó là bởi định) được thiết lập, rm sẽ hành động trên các tập tin ẩn quá, bởi vì họ sẽ được đưa khi * được mở rộng bằng vỏ để cung cấp các danh sách của tên tập tin.

  • Để loại bỏ một mục với tất cả nội dung của nó (bao gồm cả nội các thư mục):

    rm -rf /path/to/directory
  • Để loại bỏ tất cả những nội dung của các thư mục (bao gồm cả nội các thư mục) nhưng không phải các thư mục bản thân:

    rm -rf /path/to/directory/*

    hoặc, nếu bạn muốn chắc chắn rằng ẩn tập tin cũng được loại bỏ:

    rm -rf /path/to/directory/{*,.*}
  • Để loại bỏ tất cả các lịch các tập tin và nhiệt từ bên trong một mục(không loại bỏ thất thư mục):

    rm -f /path/to/directory/{*,.*}

Cảnh báo nếu bạn có không gian trong con đường của bạn, chắc chắn luôn luôn trích dẫn sử dụng.

rm -rf /path/to the/directory/*

đương với 2 tách rm -rf gọi:

rm -rf /path/torm -rf the/directory/*

Để tránh vấn đề này, bạn có thể sử dụng 'đơn trích'(ngăn chặn tất cả các mở rộng, thậm chí của vỏ biến) hay "double-trích"(cho phép mở rộng của vỏ biến, nhưng ngăn chặn khác mở rộng):

rm -rf "/path/to the/directory/"*

Nơi:

  • rm - đứng cho bỏ
  • -f - đứng cho lực lượng đó là hữu ích khi bạn không muốn được yêu cầu/nhắc nhở, nếu cậu muốn bỏ một kho lưu trữ, ví dụ.
  • -r - đứng cho đệ có nghĩa là, bạn muốn đi đệ quy xuống tất cả các thư mục, và bỏ tất cả mọi thứ.

Để loại bỏ tất cả các tập tin trong thư mục (bao gồm cả tập tin và con) chạy:

rm -rf /path/to/directory/{*,.*}

Để xóa tất cả các tập tin và thư(bao gồm cả những ẩn cái) trong một mục, bạn có thể thử sau:

  • xóa các thư mục, sau đó tạo ra nó

    rm -rf dir_name && mkdir dir_name
  • sử dụng find

    find dir_name -mindepth 1 -delete  

Ở đây chúng tôi xác định -mindepth 1 để loại trừ các mục dir_name chính nó.
Hãy nhìn vào liên kết sau:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory

Nếu bạn muốn chỉ xóa các tập tin trong đường//đến mục bạn có thể làm

find /path/to/directory -type f -print0| xargs -0 rm 

hay

find /path/to/directory -type f -exec rm '{}' \;

Bạn có thể làm vô với find đó là lợi thế bạn có thể liệt kê là những gì tìm thấy nó mà không có đường ống đến rm do đó bạn có thể xem những gì sẽ được xoá bỏ trước khi anh bắt đầu.

Nếu bạn cũng muốn loại bỏ tất cả các thư mục con và các 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 đường dây của bạn trở về trước khi nhấn, rm -rf có thể gây ra rất nhiều havock như vâng, ví dụ như nếu bạn vô tình chèn một không gian đầu tiên sau khi cắt giảm trong khi có người dùng quyền...

Kể từ đó, câu hỏi này là liên tục ở phía trên Google khi tôi tìm kiếm này cho bản thân mình:

Các câu trả lời khác bị vấn đề khác nhau:

  1. Một số của chúng bao gồm ... đó là ồn ào, lộn xộn, và gây phiền nhiễu.

  2. Một số người trong số họ quên các tập tin ẩn (tập tin bắt đầu với một dấu chấm).

  3. Họ không rõ ràng trong một đúng (sâu nhất-đầu tiên) để cho phép mục xóa.

  4. Họ rơi vào khác, (treo) file hệ thống đó là thường không mong muốn.

  5. Họ đang khó khăn để mở rộng đúng với thêm thông số (thêm vào đó dưới).

Vì vậy, để đệ quy xóa tất cả các tập tin trong một mục, làm điều này:

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 lập luận để ngăn chặn giảm dần vào gắn kết (thích /proc etc.).

Tại sao không -depth hay -delete?

Mặc dù người dân liên tục downvoting tôi cho điều này, những phương pháp có một nhược điểm: nó không có vẻ như họ đang mở rộng đủ để cho phép -prunehấy một thư (mà không cần giới thiệu nữa, vấn đề). Ngược lại với phương pháp này, anh có thể chèn

-not \( -path "${DIR}/subdir" -prune \)

trước khi những -mindepth lập luận để loại trừ subdir từ có nội dung của nó đã bị xóa.

Bạn có thể cd vào mục và sau đó chạy lệnh rm *.* giống như trong DOS nếu anh còn nhớ.

Để xóa mục hiện tại, bạn có thể ví dụ sử dụng rm -d ./*

-d nói đến xóa các thư mục là tốt.

Thấy câu trả lời đây này có thể xóa các tập tin ẩn như vậy với bất cứ cảnh báo và xóa mục bản thân ubuntu - Delete contents but not directory in Linux? - Stack Overflow

Tôi không có đủ uy tín để thêm một câu trả lời, nhưng khi sử dụng các shopt -các dotglob && rm /con đường//đến mục/* giải pháp trong bash, (shopt -các dotglob && rm /con đường//đến mục/*) (với ngoặc) sẽ ngăn chặn shopt -các dotglob rò rỉ ra ngoài đây một lệnh. (Ngoặc chạy chứa lệnh trong một subshell.)