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


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

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

nhưng điều đó không hiệu quả đối với các tệp không có tiện ích mở rộng ...


205
2017-09-06 07:58


gốc




Các câu trả lời:


Linux không sử dụng phần mở rộng. Tùy thuộc vào người tạo tệp để quyết định xem anh ấy có muốn có phần mở rộng hay không. Linux xem xét byte thứ nhất để tìm ra loại tệp mà nó đang xử lý.

Để xóa mọi thứ trong thư mục sử dụng:

rm /path/to/directory/*

Bạn có thể dùng -r tùy chọn, ví dụ:

rm -r /path/to/directory/* 

cũng loại bỏ bất kỳ thư mục con nào (cùng với tất cả nội dung của chúng) bên trong thư mục mà bạn đang xóa nội dung. Nếu không nó sẽ hiển thị một lỗi thông báo cho bạn nó không phải là loại bỏ các thư mục.


236
2017-09-06 08:06



Nếu bạn cũng muốn xóa các tập tin ẩn chạy shopt -s dotglob trước khi chạy rm (...) - danjjl
Ý nghĩa 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 - Rinzwind
@Rinzwind, chính xác hơn, dấu hoa thị có nghĩa là "không hoặc nhiều hơn bất kỳ ký tự nào". Vì thế *a* có nghĩa là không hoặc nhiều ký tự, tiếp theo là a theo sau là 0 hoặc nhiều ký tự. Nó sẽ khớp với tên tập tin happy, apple, a hoặc là la. - DisgruntledGoat
@ user784637 bạn quá dễ dàng ấn tượng - barlop
Đây là lệnh bạn muốn: rm - * - anon58192932


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

    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 nội thất) nhưng không phải 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 / thư mục ẩn cũng bị xóa.

  • Để loại bỏ tất cả các "tập tin" từ bên trong một thư mục (không phải xóa các thư mục nội thất):

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

Ở đâu:

  • rm - viết tắt của "tẩy"
  • -f - viết tắt của "lực lượng"đó là hữu ích khi bạn không muốn được hỏi / nhắc nếu bạn muốn loại bỏ một kho lưu trữ, ví dụ.
  • -r - 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ứ.

126
2017-09-07 17:26



Tôi thấy đây là câu trả lời toàn diện và hữu ích hơn, vượt qua câu trả lời được đánh dấu là Đã chấp nhận. - inspirednz
rm -rf /path/to/directory/* không xóa tệp bị ẩn trong thư mục, ví dụ: .htaccess. Có lẽ rm -rf /path/to/directory/.? Đã không thử nó. - Mark Berry
@MarkBerry rm -rf /path/to/directory/.* - Lilian A. Moraru
@ LilianA.Moraru, tôi đã làm một số thử nghiệm ngày hôm nay. 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, cũng để xóa các tệp ẩn, chạy shopt -s dotglob trước khi chạy rm -rf /path/to/directory/*. - Mark Berry
THẬN TRỌNG: rm -rf /path/to/directory/.* trên hệ thống của tôi đã khiến việc xóa các mục trong /path/to. May 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 biệt. 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 đến một vị trí riêng biệt / an toàn! - lawlist


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

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

30
2017-11-23 09:38



Đây sẽ là câu trả lời được chấp nhận tuyệt đẹp. Cảm ơn bạn! - Nam G VU
Điều này không phù hợp với "." và cũng? - hertzsprung
@hertzsprung - nó có, và nó sẽ cho bạn một cảnh báo rằng nó không thể xóa ./ và ../, nhưng nó vẫn sẽ xóa các tập tin ẩn. - Ryan Wheale
Điều này không làm việc trên giao diện điều khiển Mac, các tập tin ẩn vẫn còn đó với dòng lệnh đó. - agapitocandemor


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 đến rm để bạn có thể xem nội dung sẽ bị xóa trước khi bắt đầu.


8
2017-09-06 12:13



GNU find như một -delete vị ngữ. Nếu bạn vẫn muốn sử dụng -exec, thay thế \; với + sẽ tập hợp rm gọi cùng nhau, tăng hiệu quả. - enzotib
số lượng lớn tệp có '+' sẽ gây ra sự cố, vì danh sách sẽ quá lớn, giống như rm -f *. và khi loại bỏ một lượng lớn các tập tin từ cùng một thư mục (nói chuyện trong millons) cả hai đều không tốt :) Cuối C ++ đến và loại bỏ các tập tin theo thứ tự của inodes trong dir-tree. - Osis
Bạn thực sự nên thêm một - sau khi rm. Nếu không có điều đó nếu bạn có một tên tập tin -rf hoặc tương tự sẽ được hiểu là đối số cho rm. ví dụ. xargs -0 rm - hoặc -exec rm - {} \; - Richm
bạn cũng có thể cung cấp đối số -n cho xargs. Điều đó sẽ làm cho nó tách các lệnh rm để có số lượng đối số tối đa tức là 'xargs -n 100 -0 rm -' sẽ xóa các tệp theo khối 100. - Richm
Bạn cũng có thể thêm -maxdepth 1 để đảm bảo rằng tìm không trả về các tệp từ bất kỳ thư mục con nào. tức là tìm / path / to / directory -maxdepth 1-type f - Richm


Nếu bạn cũng muốn xóa tất cả thư mục con và thư mục, bạn có thể sử dụng rm -rf /path/to/directory. Nhưng hãy luôn kiểm tra kỹ dòng của bạn trước khi nhấn trở lại, rm -rf có thể gây ra rất nhiều havock, ví dụ: nếu bạn vô tình chèn dấu cách sau dấu gạch chéo đầu tiên trong khi có quyền superuser ...


6
2017-09-07 08:51





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

  • xóa thư mục, sau đó tạo lại

    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.
Hãy xem liên kết sau:
https://unix.stackexchange.com/questions/12593/how-to-remove-all-the-files-in-a-directory


5
2017-11-27 16:05



Cảm ơn lời khuyên của bạn và tôi đã thêm giải thích thêm cho các liên kết. - zeekvfu
Hãy cẩn thận, vì việc xóa và tạo lại thư mục có thể dẫn đến các quyền khác nhau / sai đối với thư mục này! - einjohn


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


1
2018-05-01 00:59



DOS là DEL cho các tệp và RMDIR cho các thư mục trống và các tệp hệ thống và ẩn và phải loại bỏ các thuộc tính ATTRIB đầu tiên. Không gần như đơn giản;) - Eric