GNU/Linux >> Linux Esercitazione >  >> Linux

Script della shell:condizione "se il file non viene utilizzato"?

Sto cercando di comprimere un file immagine di una macchina virtuale tramite uno script, ma voglio essere sicuro che non sia possibile accedere al file. Potrei controllare se virt-manager è in esecuzione, poiché dovrebbe essere l'unico programma che accede all'immagine, ma non so se esiste un modo migliore per farlo. Voglio anche che lo script continui a provare finché il file non è disponibile per la compressione. Non so nemmeno io come farlo.

#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

Risposta accettata:

Il lsof comando può dirti se un file è in uso. Puoi inserirlo in un while ciclo con un sleep per farlo controllare ogni tanto.

Ad esempio:

Nella finestra 1 puoi eseguire sleep 10000 > /tmp/x

Nella finestra 2 esegui questo script:

#!/bin/bash

FILE=/tmp/x

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

echo "File $FILE not in use"

Ora quando premi control-C per interrompere il sleep vedrai la risposta "File non in uso" entro un secondo circa.


Linux
  1. Script Shell per spostare i file più vecchi?

  2. Come controllare la sottostringa in Shell Script Bash?

  3. Come includere un file in uno script di shell bash

  4. Come eseguire un file senza estensione .sh nella shell

  5. Un file .sh può essere un malware?

Cos'è un file .sh?

Modifica del contenuto di un file tramite script di shell

Comando Linux per verificare se uno script di shell è in esecuzione o meno

sposta solo se il file esiste in uno script di shell

Scopri se il file esiste o meno in HDFS usando lo script della shell

Creazione di modelli con Linux in uno script Shell?