GNU/Linux >> Tutoriels Linux >  >> Linux

Script Shell :Condition "si le fichier n'est pas utilisé" ?

J'essaie de compresser un fichier image de machine virtuelle via un script, mais je veux être sûr que le fichier n'est pas accessible. Je pourrais vérifier si virt-manager est en cours d'exécution, car ce devrait être le seul programme à accéder à l'image, mais je ne sais pas s'il existe une meilleure façon de le faire. Je souhaite également que le script continue d'essayer jusqu'à ce que le fichier soit disponible pour être compressé. Je ne sais pas non plus comment faire.

#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

Réponse acceptée :

Le lsof La commande peut vous dire si un fichier est en cours d'utilisation. Vous pouvez mettre cela dans un while boucle avec un sleep pour le faire vérifier de temps en temps.

Par exemple :

Dans la fenêtre 1, vous pouvez exécuter sleep 10000 > /tmp/x

Dans la fenêtre 2, exécutez ce script :

#!/bin/bash

FILE=/tmp/x

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

echo "File $FILE not in use"

Maintenant, lorsque vous appuyez sur control-C pour interrompre la sleep vous verrez la réponse "Fichier non utilisé" dans une seconde environ.


Linux
  1. Modification du contenu d'un fichier via un script shell

  2. Commande Linux pour vérifier si un script shell est en cours d'exécution ou non

  3. déplacer uniquement si le fichier existe dans un script shell

  4. Comment exécuter un fichier sans extension .sh dans le shell

  5. Rechercher si le fichier existe ou non dans HDFS à l'aide d'un script shell

Script Shell pour déplacer les fichiers les plus anciens ?

Comment ajouter des données au tampon dans le script shell ?

Comment vérifier la sous-chaîne dans Shell Script Bash?

Comment exécuter un script shell au démarrage

Copier et écraser un fichier dans un script shell

Qu'est-ce qu'un fichier .sh ?