Làm cách nào để xóa tất cả các thư mục trống


11

(trên hệ thống Linux)

Tôi có một tập hợp lớn các thư mục con lồng nhau trên một hệ thống tập tin. Tôi muốn cắt tỉa tất cả các đường dẫn thư mục không chứa tập tin nào cả.

Nói cách khác, tôi muốn xóa mọi thư mục trong đó không có tệp nào trong thư mục đó hoặc trong bất kỳ thư mục con nào của thư mục đó theo cách đệ quy.

Câu trả lời:


15

Đối với tất cả các phiên bản tìm

find -depth -type d -empty -exec rmdir {} \;

Nếu bạn có phiên bản mới hơn

 find -type d -empty -delete

tuyệt, không biết -deletecờ.
ansi_lumen

Tôi cũng không. Tôi đã học được một cái gì đó mới. Tôi đã viết các kịch bản trước đó, sử dụng đệ quy để tìm các thư mục trống. Điều này rất đơn giản hóa nhiệm vụ đó.
James

2
ya cờ -empty thực sự giúp đỡ ở đây. Nó cũng hoạt động để tìm các tệp trống nếu bạn không bao gồm -type d hoặc chỉ sử dụng -type f
Mike

1

Có thể không phải là giải pháp tốt nhất, nhưng kịch bản này hoạt động:

#!/bin/sh

while true
do
    DIRS=`find . -xdev -type d -exec find {}  -maxdepth 0 -empty  \;`
    if [ -z "$DIRS" ]; then
        exit 0
    else
        echo $DIRS | xargs rmdir
    fi
done

(dựa một phần vào câu trả lời để Liệt kê tất cả các thư mục trống )


1
Tôi nhận ra rằng điều này sẽ đi vào một vòng lặp vô hạn nếu bạn không có quyền xóa bất kỳ thư mục trống nào, vì vậy vui lòng sử dụng câu trả lời được chấp nhận thay thế :)
AndrewR

0
for i in `find -type d -empty`; do rmdir $i; done

Gần, nhưng không có xì gà. Bạn đang thiếu trường hợp xóa thư mục khiến cha mẹ của nó trở nên trống rỗng.
Simon Richter

Đúng. Tôi sẽ findhọ trong lần chạy thứ hai. Không bao giờ có trường hợp này trong cuộc sống thực.
ansi_lum
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.