Vòng lặp while trong bash cho đến khi kích thước tệp không thay đổi [đã đóng]


-1

Tôi đang cố gắng thực hiện các vòng lặp sau trong khi sử dụng tập lệnh bash

file_size = 0
temp_size = 1
output_file
while (file_size != temp_size)
     temp_size = file_size
     download file
     append to output_file if possible
     file_size = sizeof(output_file)

Cảm ơn!


2
Xin vui lòng đọc lên bash scripting, thử một cái gì đó sau đó gửi một câu hỏi nếu bạn có vấn đề cụ thể.
terdon

Câu trả lời:


6

Không rõ chính xác những gì bạn đang tìm kiếm, nhưng tôi đã chụp một hy vọng rằng điều này sẽ giúp bạn.

Chương trình sau đây cần được đặt trong một tệp văn bản. Hãy nói rằng bạn đặt tên cho nó dl. Bạn cần thay đổi quyền của nó với

chmod u+x dl

Bạn chạy nó bằng cách chuyển vào tên tệp đầu ra mà bạn đang tìm kiếm.

./dl output

Nó tải xuống tệp hình ảnh, tại url tôi đã mã hóa cứng, lặp đi lặp lại việc nối thêm đầu ra vào tệp đầu ra cho đến khi kích thước của tệp đầu ra bằng hoặc lớn hơn kích thước mà bạn chỉ định trong temp_sizebiến.

#!/usr/bin/env bash

STAT="stat -c%s"
if [ $(uname) == "Darwin" ]; then
  STAT="stat -f%z"
fi

if [[ $# -ne 1 ]]; then
  echo "Usage: $0 output_filename"
  exit 1
fi

output_file="$1"
file_size=$($STAT "$output_file")
temp_size=1000000
download_file="http://www.google.com/logos/doodles/2013/franz_kafkas_130th_birthday-1976005-hp.png"
while [[ $file_size -le $temp_size ]]; do
  wget -O - $download_file >> "$output_file"
  file_size=$($STAT "$output_file")
done
echo $output_file is now $file_size bytes.

Nếu bạn chạy lại nó với cùng một tham số, nó sẽ không làm gì cả vì tệp đầu ra đã lớn hơn temp_size. Bạn có thể đặt lại bằng cách đặt tên tệp khác hoặc xóa tệp đầu ra.

rm output

2
Tại sao bạn lại quay trở lại env? Tin tôi đi, trên trang web này, bạn sẽ nhận được upvote chỉ vì sử dụng nó và nó làm cho tập lệnh của bạn có thể di động tới bất kỳ hệ thống * nix nào. Đó là một thói quen tốt để có được vào.
terdon

1
Bạn cẩn thận đặt các chuỗi giữa các dấu ngoặc kép nhưng trên một số dòng output_filebạn quên chúng sẽ không cho phép sử dụng tên tệp có dấu cách.
pabouk
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.