Thanh tiến trình trong updateb


8

Có thể có được một thanh tiến trình đáng tin cậy (hoặc chỉ là một thông tin đáng tin cậy sẽ mất bao lâu) khi làm updatedb?

Câu trả lời:


5

Không, không có lựa chọn nào như vậy, cũng không nên có.

Nếu bạn cần đo lường điều đó, trước tiên bạn phải biết có bao nhiêu tệp hiện diện trên hệ thống của mình, điều đó có nghĩa là lặp qua mọi thứ hai lần, nó có thể chậm

Một ví dụ rõ ràng là nếu bạn trích xuất mã nguồn kernel file-roller, nó chậm hơn so với thực hiện cùng một cách tartrực tiếp, bởi vì con lăn tệp cần phải loại bỏ tất cả các tệp trước (nếu không, thanh tiến trình có thể được hiển thị không chính xác) và bạn chờ một trong khi trước khi quá trình khai thác thực sự bắt đầu.


Bạn hoàn toàn đúng. Tuy nhiên, có thể dự đoán thời gian cho lần chạy tiếp theo bằng cách sử dụng một trò chơi đoán thông minh trên YouTube. Chẳng hạn, người ta có thể tính trung bình di chuyển theo cấp số nhân từ các giá trị trong quá khứ, về cơ bản giả định rằng lần chạy tiếp theo sẽ mất chừng nào trung bình của lần chạy cuối cùng. Điều này tất nhiên là không chính xác, nhưng rất rẻ để tính toán vì nó không lặp trên hệ thống tệp. Cho rằng số lượng tệp và tải không thay đổi đáng kể, nó sẽ mang lại giá trị ước tính rất thực tế.
Marco

6

Đây không phải là một giải pháp hiệu quả, nhưng cũng không tệ bằng việc lặp đi lặp lại mọi thứ hai lần.

Số lượng tệp được xử lý updatedbbằng:

updatedb -v | wc -l

hoặc gần bằng:

find / -mount | wc -l

Chúng ta không thể sử dụng các lệnh này để lấy số, vì nó sẽ được lặp hai lần.

Nhưng chúng ta có thể sử dụng số lượng các nút được sử dụng, gần bằng nhau:

df -i | grep '/$' | awk '{print $3}'

Có giá trị này, chúng ta có thể tính toán khoảng cách chúng ta nhận được trong khi updatedb -vlệnh đang chạy:

count=$(df -i | grep '/$' | awk '{print $3}')

sudo updatedb -v | while read
do
    printf "%3d\r" $((100 * (++i) / count))
done

Điều này rất không hiệu quả, bởi vì printfđược gọi cho mỗi dòng trong đầu ra của updatedb -v. Tốt hơn nếu chúng ta printfchỉ cho một số dòng.

count=$(df -i | grep '/$' | awk '{print $3}')

sudo updatedb -v | while read
do
    if (( ++i % (count/20) == 0 )); then
        printf "%3d\r" $((100 * i / count))
    fi
done

Ý tưởng thú vị. Nhưng df -ibáo cáo của tôi 0 trong tất cả các cột cho /. Có thể trích xuất số lượng tệp của cơ sở dữ liệu hiện tại từ locate -S(hoặc --statisticschuyển đổi tương tự khác mà locateviệc triển khai của bạn có) cũng có thể được sử dụng làm số lượng tệp gần đúng.
manatwork

Giải pháp này hiệu quả với tôi, giá trị phần trăm có vẻ khá chính xác.
Kubfoxer82
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.