GNU/Linux >> Linux の 問題 >  >> Linux

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

スクリプトを使用して仮想マシンのイメージファイルを圧縮しようとしていますが、ファイルがアクセスされていないことを確認したいと思います。 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

承認された回答:

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秒ほどで「ファイルは使用されていません」という応答が表示されます。


Linux
  1. シェルスクリプトBashでサブストリングをチェックする方法は?

  2. シェルで .sh 拡張子のないファイルを実行する方法

  3. シェル スクリプトで Linux を使用してテンプレートを作成しますか?

  1. ファイルを bash シェル スクリプトに含める方法

  2. 起動時にシェルスクリプトを実行する方法

  3. シェル スクリプトを使用してファイルの内容を変更する

  1. シェル スクリプトが実行されているかどうかを確認する Linux コマンド

  2. ファイルがシェルスクリプトに存在する場合にのみ移動する

  3. シェル スクリプトを使用して HDFS にファイルが存在するかどうかを調べる