パスにgzipファイルを取得しています。
入力フォルダパス:
<server>/input_gate
このフォルダにあるGZIPファイルが有効かどうかを確認したいですか?次のコマンドを使用しました。有効なgzipファイルを見つけるのは良いことですか?
gzip -t -v <file_name>
ただし、移動が行われている場合、ファイルは無効なファイルとして表示されます。ただし、実際には、移動が完了するとファイルは有効になります。取得したファイルが完全に移動されたファイルであるか、移動がまだ進行中であるかを確認する方法はありますか?
“ Ask Ubuntu” のこの回答に従って、 lsof
(開いているファイルのリスト)を使用して、ファイルが開いているかどうかを確認できます。
lsof | grep <server>/input_gate
lsof
の使用path/to/input_gate
などのプロセスでファイルが開いているかどうかをテストするには、次のコマンドを実行します。
lsof path/to/input_gate
これは、ファイルを使用しているプロセスがある場合はコード0で終了し、ファイルを使用しているプロセスがない場合(またはエラーが発生した場合)はコード1で終了します。この終了コードは、シェルコマンドで使用できます。
これをテストするために、ファイルを開くプロセスを作成しましょう。
sleep 10 >>path/to/input_gate &
これにより、ファイルが10秒間開いたままになります。 lsof
をテストするには、次のコマンドをすばやく実行します。
$ if lsof path/to/input_gate >/dev/null; then echo "In use"; else echo "Not in use"; fi
In use
10秒待ってから、再試行してください。
$ if lsof path/to/input_gate >/dev/null; then echo "In use"; else echo "Not in use"; fi
Not in use
他のプロセスがファイルを使用しなくなるまで待ちたい場合:
while lsof path/to/input_gate >/dev/null; do sleep 1; done; echo "Finally, not in use"
inotifywait
の使用システムがinotifywait
をサポートしている場合(Linuxシステムがサポートしている必要があります)、対象のファイルでクローズイベントを探すことができます。
inotifywait "path/to/input_gate" -e close
上記のコマンドは、何らかのプロセスがファイルを閉じるまでブロックします。
このアプローチの利点は、ポーリングが不要になることです。
このアプローチの欠点は、あるプロセスがファイルを閉じることを最初に通知することであり、それはファイルを閉じたallプロセスと同じではない可能性があります。