Linuxでコマンドラインから大きなファイルをダウンロードしている場合、それがすでに完了しているかどうかを知るためのコマンドはありますか?現在、ファイルサイズが予想されるファイルサイズと同じかどうかを確認しているだけですが、予想されるファイルサイズがわからない場合はどうなりますか?現在、ls
は、ファイルが現在ダウンロード中であっても、file.Zip
のようなものではなく、正確なファイル名(つまり、file.Zip.temp
)を表示します。
バックグラウンドでwgetを実行する必要がない場合は、実行しないでください。問題が発生するだけです。
ps -C wget
またはpidof wget
(より短く、おそらく非POSIX、ps -ef | grep wget | grep -v grep
と同等)をチェックするようなソリューションには反対します。なぜなら、それらは1つだけでなく任意のwget
を考慮するからです。あなたが興味を持っているのは、あなたのマシンが1つのタスクだけを実行しない場合、これは想定外の仮定かもしれません。
スクリプト内にいる場合は、wget & WGETPID=$!
して、そのPIDを確認できます。または、単にwait
を実行して、バックグラウンドプロセスが終了するのを待つこともできます。
ダウンロードの成功と失敗を区別するために、何かを行うことが重要な場合があります。 if wget ... ; then touch wget_ok ; else touch wget_error ; fi
複数のwget
コマンドを実行している場合はどうなりますか?
このシナリオに対応する必要がある場合は、いくつかの異なることを行うことができます。
プロセスが完了した後、つまりトークンを書き込むことができます。
wget 'file'; touch file.is.done
lsof
approach slhckが提案 がおそらく最良の方法です。ダウンロードの完了後にファイルを作成することを含む他の提案を使用する場合は、&&
の代わりに;
を使用して、ダウンロードが正しく終了した場合にのみレポートが生成されるようにします。
wget file && touch file.is.done
むしろ音の信号が欲しいので、すぐに見たくない長い操作(wgetだけでなく、時間のかかる)を開始した場合は、次のようなものを使用します
_`LONG_COMMAND && SOUND_OK || SOUND_ERROR`
_
そのため、いつ終了するかをすぐに知る必要がある場合でも、チェックのために時々自分自身を中断することなく、同時に何か他のことを行うことができます。最初のコマンドが終了した場合、結果を聞くことができます(_SOUND_OK
_の結果)ステータスは_0
_および_SOUND_ERROR
_(その他の場合)であり、終了時にのみ1回チェックします。タスクが終了したことだけを知る必要がある場合は、現在のアクティビティを続行することもできます。 _LONG_COMMAND
_はwget
であり、_SOUND_OK
_として私は_echo -e "\a" >/dev/console
_を好みますが、コマンドを使用して任意のオーディオサンプルを再生できます。
Wgetがいくつかの異なる終了コードを生成できる限り、それらを使用して、次のように「BIOSスタイル」でアラームコマンドを決定できます。
_wget URL;\
CODE=$?;\
beep;\
[ $CODE -gt 0 ] && while true; do
for peek in `seq 1 $CODE`; do
beep; sleep 1;done
sleep 3; done
_
-o dl.logオプションを指定してwgetを開始できます。つまり、この行が(正規表現を使用して)表示されるかどうかを定期的に確認できるログファイルを定義できます。
12:59:48 (126.32 MB/s) - `/path/to/downloaded/file/some_file.Zip' saved [95235097/95235097]
実際には、「tail dl.log」を使用して、すべてを読み取る代わりに、最後の数行のみを取得できます。