GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Shell-Skript:Bedingung „wenn Datei nicht verwendet wird“?

Ich versuche, eine Image-Datei einer virtuellen Maschine über ein Skript zu komprimieren, aber ich möchte sicher sein, dass nicht auf die Datei zugegriffen wird. Ich könnte überprüfen, ob virt-manager läuft, da es das einzige Programm sein sollte, das auf das Image zugreift, aber ich weiß nicht, ob es einen besseren Weg gibt, dies zu tun. Ich möchte auch, dass das Skript weiter versucht, bis die Datei zum Komprimieren verfügbar ist. Ich weiß auch nicht, wie ich das machen soll.

#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

Akzeptierte Antwort:

Die lsof Der Befehl kann Ihnen mitteilen, ob eine Datei verwendet wird. Sie können das in while einfügen Schleife mit einem sleep um es von Zeit zu Zeit zu überprüfen.

Zum Beispiel:

In Fenster 1 können Sie sleep 10000 > /tmp/x ausführen

Führen Sie in Fenster 2 dieses Skript aus:

#!/bin/bash

FILE=/tmp/x

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

echo "File $FILE not in use"

Wenn Sie jetzt control-C drücken um den sleep abzubrechen Innerhalb einer Sekunde sehen Sie die Antwort „Datei nicht in Gebrauch“.


Linux
  1. Wie erstelle ich eine temporäre Datei im Shell-Skript?

  2. Wie fügt man Daten an den Puffer im Shell-Skript an?

  3. Init.d-Skript wird beim Booten nicht ausgeführt?

  4. Ändern des Inhalts einer Datei durch Shell-Skript

  5. Nur verschieben, wenn die Datei in einem Shell-Skript vorhanden ist

Kopieren und überschreiben Sie eine Datei im Shell-Skript

Was ist eine .sh-Datei?

Linux-Befehl, um zu prüfen, ob ein Shell-Skript ausgeführt wird oder nicht

So führen Sie eine Datei ohne die Erweiterung .sh in der Shell aus

Shebang oder nicht Shebang

Das SH-Skript in $PATH wird unter Linux Alpine 3.11 nicht gefunden