GNU/Linux >> Tutoriales Linux >  >> Linux

Shell Script:¿Condición "si el archivo no se está utilizando"?

Estoy tratando de comprimir un archivo de imagen de una máquina virtual a través de un script, pero quiero asegurarme de que no se acceda al archivo. Podría verificar si virt-manager se está ejecutando, ya que debería ser el único programa que accede a la imagen, pero no sé si hay una mejor manera de hacerlo. También quiero que el script siga intentándolo hasta que el archivo esté disponible para comprimir. Yo tampoco sé cómo hacer eso.

#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

Respuesta aceptada:

El lsof El comando puede decirle si un archivo está en uso. Puedes poner eso en un while bucle con un sleep para que lo revise cada cierto tiempo.

Por ejemplo:

En la ventana 1 puedes ejecutar sleep 10000 > /tmp/x

En la ventana 2, ejecute este script:

#!/bin/bash

FILE=/tmp/x

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

echo "File $FILE not in use"

Ahora cuando presionas control-C para abortar el sleep verá la respuesta "Archivo no en uso" en aproximadamente un segundo.


Linux
  1. ¿Cómo agregar datos al búfer en el script de Shell?

  2. Cambiar el contenido de un archivo a través de un script de shell

  3. Comando de Linux para verificar si un script de shell se está ejecutando o no

  4. ¿Puede un archivo .sh ser malware?

  5. El script SH en $PATH no se encuentra en Linux Alpine 3.11

¿Script de Shell para mover archivos más antiguos?

¿Cómo crear un archivo temporal en Shell Script?

¿Cómo verificar la subcadena en Shell Script Bash?

Copie y sobrescriba un archivo en el script de Shell

¿Qué es un archivo .sh?

¿Plantillas con Linux en un script de Shell?