Saya mencoba mengompresi file gambar mesin virtual melalui skrip, tetapi saya ingin memastikan file tersebut tidak sedang diakses. Saya dapat memeriksa apakah virt-manager sedang berjalan, karena itu seharusnya menjadi satu-satunya program yang mengakses gambar, tetapi saya tidak tahu apakah ada cara yang lebih baik untuk melakukannya. Saya juga ingin skrip terus mencoba hingga file tersedia untuk dikompres. Saya juga tidak tahu bagaimana melakukannya.
#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
Jawaban yang Diterima:
lsof
perintah dapat memberi tahu Anda jika file sedang digunakan. Anda dapat memasukkannya ke dalam while
loop dengan sleep
untuk membuatnya sering diperiksa.
Misalnya:
Di jendela 1 Anda dapat menjalankan sleep 10000 > /tmp/x
Di jendela 2 jalankan skrip ini:
#!/bin/bash
FILE=/tmp/x
while [ -n "$(lsof "$FILE")" ]
do
sleep 1
done
echo "File $FILE not in use"
Sekarang ketika Anda menekan control-C
untuk membatalkan sleep
Anda akan melihat respons “File tidak digunakan” dalam satu atau dua detik.