wget
私は夜に自動的にファイル(主にzipファイル)をダウンロードする習慣があります。
しかし、朝に解凍できないファイルが複数見つかる場合もあります。なぜこれが起こるのかわかりません。リモートサーバーに問題がある可能性があります。
「unzip -t」を使ってダウンロードフォルダのzipファイルを定期的にテストするスクリプトを作成したいのですが、ダウンロードするファイルをテストしたくありません。それでは、ファイルが使用されているかどうかをどうやって知ることができますかwget
?
答え1
fuser
、またはを使用できますlsof
。
fuser foo.zip
出力は次のとおりです。
$ fuser archlinux-2013.02.01-dual.iso
/home/chris/archlinux-2013.02.01-dual.iso: 22506
$ awk -F'\0' '{ print $1 }' /proc/22506/cmdline
wget
答え2
ファイルを一時名またはディレクトリにダウンロードするようにダウンロードスクリプトを変更し、ダウンロードが完了したら結果を移動します。これは、wgetがまだ機能しているかどうかを検出するよりも安定しています。特にwgetが中断された場合(たとえば、再起動)、完全なダウンロードのために部分ファイルを間違える危険性はありません。また、wgetの戻り状態をテストする必要があります。破損したファイルは、実際にはダウンロードの中断によって切り捨てられたファイルである可能性が高いです。
cd incoming &&
wget http://example.com/foo.zip &&
mv foo.zip ..
答え3
lsofを使用して、プログラムでファイルが開いていることを確認できます。
for FILE in /path/to/files/*.zip
do
if [ -z "$(lsof $FILE)" ]
then
unzip $FILE
fi
done
または同様のもの