シェルスクリプト:「ファイルが使用されていない場合」の条件

シェルスクリプト:「ファイルが使用されていない場合」の条件

スクリプトを使用して仮想マシンイメージファイルを圧縮しようとしていますが、ファイルにアクセスしていないことを確認したいと思います。 virt-managerがイメージにアクセスする唯一のプログラムである必要があるため、実行していることを確認できますが、これを行うより良い方法があるかどうかはわかりません。また、ファイルが圧縮される準備ができるまでスクリプトを試み続けたいと思います。私も何をすべきかわかりません。

#Check if virt-manager is running
if pgrep "virt-manager" > /dev/null
then
    #re-run script until success
else
    gzip -k < /home/brady/.vms/windows10/hdd.img > /media/backup/vms/windows10/hdd.$(date +"%F.%T).img.gz

ベストアンサー1

このlsofコマンドは、ファイルが使用中かどうかを示します。頻繁に確認するようにwhileループに入れることができます。sleep

たとえば、

ウィンドウ1では、以下を実行できます。sleep 10000 > /tmp/x

ウィンドウ2で、次のスクリプトを実行します。

#!/bin/bash

FILE=/tmp/x

while [ -n "$(lsof "$FILE")" ]
do
  sleep 1
done

echo "File $FILE not in use"

control-C中断ボタンを押すと、sleep約1秒間「ファイルが使用されていません」という応答が表示されます。

おすすめ記事