it-swarm-vi.com

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

Tôi đang cố gắng loại bỏ tất cả các tập tin và thư mục con trong một thư mục. Tôi đã sử dụng rm -r để xóa tất cả các tệp, nhưng tôi muốn xóa tất cả các tệp thư mục con, ngoại trừ chính thư mục trên cùng.

Ví dụ: tôi có một thư mục hàng đầu như images. Nó chứa các tệp header.png, footer.png và một thư mục con.

Bây giờ tôi muốn xóa header.png, footer.png và thư mục con, nhưng không phải images.

Làm thế nào tôi có thể làm điều này trong linux?

78
poorani

Nếu thư mục cấp cao nhất của bạn được gọi là images, thì hãy chạy rm -r images/*. Điều này sử dụng toán tử toàn cầu Shell * chạy rm -r trên mọi tệp hoặc thư mục trong images.

63
Jordan Lewis

Để xóa các tập tin ẩn, bạn phải xác định:

rm -r images/* images/.*

Với đạn pháo có khối u bao gồm ..., điều này sẽ dẫn đến một lỗi như

rm: cannot remove `.' directory `images/.'
rm: cannot remove `..' directory `images/..'

nhưng nó sẽ xóa các tập tin ẩn.

Một cách tiếp cận không có lỗi là sử dụng find/xóa với mindepth. Đây là gnu-find.

find images -mindepth 1 -delete

Phát hiện của bạn có thể thiếu -mindepth hoặc là -delete vị ngữ, trong trường hợp nào, bạn có thể làm:

find images/. ! -name . -Prune -exec rm -rf {} +
54
user unknown

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

  • sử dụng ls -Ab để khớp với tất cả các tệp/thư mục

    cd dir_name && rm -rf `ls -Ab`
    
  • sử dụng find để khớp với tất cả các tệp/thư mục

    find dir_name -mindepth 1 -delete
    

    hoặc, nếu find của bạn không hỗ trợ -delete:

    find dir_name -mindepth 1 -exec rm -rf {}
    
  • xóa thư mục, sau đó tạo lại nó

    rm -rf dir_name && mkdir dir_name
    
  • trong bash

    shopt -s dotglob  
    rm -rf dir_name/*
    
21
zeekvfu

Để xóa tất cả thông thường các tệp đệ quy trong một thư mục, lệnh này (giả sử GNU hoặc FreeBSD find) là đủ tốt:

find . -type f -delete

Điều đó khiến tất cả các tệp không thông thường như symlink (cho dù chúng trỏ đến tệp thông thường hay không), thư mục, fifos, socket, thiết bị ...

Xem thêm:

find . ! -type d -delete

để xóa các loại tệp ngoại trừ thư mục.

11
amit singh

Hãy thử phiên bản này:

 rm -r test/*
6
demas

Tôi đang sử dụng lệnh find tại đây:

Bước 1 : Tìm tất cả các tệp và xóa chúng:

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

Thí dụ:

find /home/user/Desktop/images/ -type f -exec rm {} \;

Bước 2 : Tìm tất cả các thư mục con và xóa chúng:

find /path/to/directory/ -type d -exec rm -R {} \;
3
Mandar Shinde

Câu hỏi là để trống một thư mục = xóa nội dung của một thư mục bao gồm các tệp ẩn, nhưng không phải chính thư mục đó. Lệnh find với -mindepth 1 thực sự là cách chính xác để đi, nhưng để tránh các thông báo lỗi, nó phải được nối với -maxdepth 1:

find /path/to/dir -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;
3
Maddes

cú pháp của rm là:

rm [OPTION]... FILE...

Vì vậy, bạn phải nêu rõ đường dẫn thích hợp, ví dụ:.

rm -r sub_dir/
0
Zaur Nasibov

Bạn có thể xóa thư mục bằng lệnh sau:

Sudo rm -r directoryname1/2/3/*

Nó sẽ bị xóa toàn bộ thư mục sau 3/*.

Ví dụ Sudo rm -r Tải xuống/bài hát/*

Nó sẽ bị xóa tất cả các tệp trong Downloads/song.

0
Dharmendra Rajput

Điều này hoạt động hoàn hảo đối với tôi, đã thử nghiệm một số biến thể làm việc mỗi lần.

Từ thư mục chứa thư mục hình ảnh.

rm -frd ./images/*

trước:

images/
    |_ header.png
    |_ footer.png
    |_ subdir/

sau:

images/
0
deb-linux-user

Để xóa tất cả các tệp và thư mục con trong thư mục hiện tại, bao gồm các tệp bị ẩn, không có thông báo lỗi :

rm -rf .[^.] .??* *

Hoặc, từ thư mục mẹ:

rm -rf images/.[^.] images/.??* images/*

Từ https://serverfault.com/a/47940/269538 .

0
this

Một lựa chọn khác:

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

nguồn: https://askubfox.com/a/552834/56648

0
Eyal Levin