2011-12-22 32 views
6

Tôi đã viết tập lệnh nhỏ này vào một ngày khác. Đây là một chương trình nhỏ về cơ bản tìm thấy video flash đang chạy trong trình duyệt và tải chúng xuống. mã đi một cái gì đó như thế này ..Xác định thời điểm video đã hoàn thành bộ đệm

mã:

path=$(stat -c %N /proc/*/fd/* 2>&1|awk -F[\`\'] '/lash/{print$2}') 
pid=$(echo $path | cut -d/-f3) 
name=$(ps --no-header -o comm -p $pid) 
mid=$(wmctrl -l | grep -i $name) 
filename=`echo $mid | cut -c 21-$(($(echo $mid | wc -c)-16))` 
cp $path /home/Downloads/"$filename.avi" 

đây chỉ là một phần của dòng đầu tiên code.The của mã được đường dẫn đến tạm thời xóa file.The dòng thứ hai được pid. Thứ ba tên quá trình.Thêm id cửa sổ và tiêu đề cửa sổ. Dòng thứ năm điều khiển đầu ra wmctrl để trích xuất tên của video đang phát (phần lớn thời gian tên video được đưa vào tiêu đề cửa sổ..ví dụ: youtube Bây giờ khi tập lệnh này được chạy sau khi toàn bộ video đã được lưu vào bộ đệm, nó chạy hoàn hảo (tập lệnh trên hoạt động với google chrome) .. và sao chép tệp từ thư mục/proc // fd vào thư mục tải xuống và thay đổi tên của nó vào tên tệp được trích xuất.

Bây giờ ở đây có phần lừa. Tôi muốn tự động mã này, như, để tôi chạy mã này lúc này tôi phải chờ video kết thúc đệm (nói youtube).

Tôi muốn tập lệnh này xác định thời điểm video đã kết thúc lưu vào bộ đệm và sau đó tiếp tục với phần sao chép mà không cần phải chạy thủ công phần này ở cuối video.

Vậy có cách nào để tôi có thể biết khi nào một video đã hoàn thành bộ đệm không?

Tôi là một gợi ý beginner.Any để cải thiện mã được hoan nghênh

+0

Ý tưởng thú vị. Bạn có phải lo lắng về các tập tin tmp biến mất sau khi nó được thực hiện chơi hoặc là một phần của bộ nhớ cache trình duyệt mà chỉ bị xóa đôi khi? Ngoài ra, đối với tên tập tin = phần tại sao bạn sử dụng backticks, toàn bộ vẻ đẹp của $ (...) cho cmd-thay thế là bạn có thể lồng chúng mà không có bất kỳ vấn đề trích dẫn. Chúc may mắn. – shellter

+0

@shellter: Cảm ơn bạn đời! Tôi đã tìm ra tập tin cuối cùng. Tệp biến mất chỉ khi quá trình bị giết.Đó là, tệp vẫn còn trong thư mục cho đến khi trình duyệt bị đóng. Đây là điều hiển nhiên từ thực tế là video (chủ yếu từ youtube) không được tải xuống khi chúng tôi phát lại chúng, chúng được phát từ bộ đệm (hoặc tương tự). Và backticks, tốt, tôi đã nhận được một lỗi không mong muốn. Lý do là việc kích cỡ tệp (của video đang được tải xuống) tiếp tục thay đổi cho đến khi quá trình đệm hoàn tất. Do đó, chúng tôi kiểm tra các tệp cho đến khi nó trở thành không đổi và sau đó kích hoạt chức năng tải xuống. –

+0

Xin lỗi là viết tắt của các nhân vật ở đó.mã là monitor_size() { một = 'du -L" $ đường dẫn "| awk '{print $ 1}' ' ngủ 5 hai =' du -L "$ đường dẫn" | awk '{print $ 1}' ' nếu [$ một -eq $ hai] sau đó tải khác monitor_size fi } trong đó chức năng tải về chứa code.Btw trước đó, tôi đoán bạn đã đúng về việc biến mất tệp tmp.Streaming khác.Youtube chỉ tải các tệp xuống máy tính của bạn. : thở dài: –

Trả lời

0

để có được kích thước tập tin, bạn có thể sử dụng:

stat -c %s $filename 

với điều này bạn có thể thiết lập một vòng lặp while để kiểm tra xem các tập tin vẫn còn thay đổi

CURSIZE=0 
LASTSIZE=1 
while ([ $CURSIZE -ne $LASTSIZE ]) do 
    LASTSIZE=`stat -c %s $filename` 
    sleep 1 
CURSIZE=`stat -c %s $filename` 
done 

sau đó, bạn sẽ có thể sao chép nó giả sử kết nối internet của bạn không nấc cho lớn hơn giá trị ngủ

Các vấn đề liên quan