GNU/Linux >> Belajar Linux >  >> Linux

Shell Script:Kondisi "jika File Tidak Digunakan"?

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.


Linux
  1. Mengubah konten file melalui skrip shell

  2. Perintah Linux untuk memeriksa apakah skrip shell sedang berjalan atau tidak

  3. Cara mengeksekusi file tanpa ekstensi .sh di shell

  1. Bisakah file .sh menjadi malware?

  2. shebang atau bukan shebang

  3. Skrip SH di $PATH tidak ditemukan di Linux Alpine 3.11

  1. Script Shell Untuk Memindahkan File Terlama?

  2. Bagaimana Cara Menambahkan Data Ke Buffer Dalam Script Shell?

  3. Membuat template dengan Linux dalam Shell Script?