web-dev-qa-db-fra.com

Comment, dans un script, puis-je déterminer si un fichier est en cours d'écriture par un autre processus?

Je suis très nouveau dans le script bash, il est donc possible que je me trompe d'arborescence, mais voici ma situation actuelle:

Dans un script, je commence soffice; convertir un odt en un pdf

Il semble que soffice se détache du processus du script et s'égare pour faire ce qu'il veut. Ok, c'est bon; Les applications graphiques ont tendance à le faire ...

Cependant, je dois attendre que le nouveau pdf soit entièrement écrit, car ma prochaine étape consiste à traiter ce nouveau pdf .

(Pour autant que je sache), je ne peux pas utiliser l'ID de processus de soffice, car il s'agissait peut-être déjà d'un processus en cours d'exécution avant le démarrage de mon script: par exemple. soffice est peut-être déjà ouvert pour une activité graphique normale pour un autre document/présentation/feuille de calcul non associé.

Pour moi, le noeud du problème est qu'avant de pouvoir continuer, l'écriture du nouveau pdf doit être finalisée ...

Existe-t-il un moyen de déterminer quand un fichier est plus maintenant ouvert à un autre processus en mode "écriture"? ...

19
Peter.O

Vous pouvez utiliser lsof | grep /absolute/path/to/file.txt pour voir si un fichier est ouvert. Si le fichier est ouvert, cette commande retournera le statut 0, sinon 256 (1).

Sachez que cette commande prendra une seconde car il y a normalement beaucoup de fichiers ouverts à tout moment.

Vous pouvez également utiliser lsof -c gedit, par exemple, pour voir le fichier ouvert par gedit. En limitant la sortie à un processus, le temps d'exécution sera pratiquement réduit à néant.

Voici un script à attendre:

#!/bin/bash

while :
do
    if ! [[ `lsof -c python3.2 | grep test.py` ]]
    then
        break
    fi
    sleep 0.5
done
echo "done"

Cela s'exécute tant qu'un processus 'pyhton3.2' a ouvert le fichier 'test.py'. Dès que le fichier est fermé, il passe à "écho terminé" et se termine.

J'ai mis 'sleep 0.5' dedans pour que la boucle n'enlève pas trop le processeur. Sinon, il utilisera 100% de l'unité centrale.

Bonus Il semble y avoir un moyen facile de comprendre le pdf:

Merci à scls19fr sur le OOo Forum pour cette jolie astuce. Vous pouvez convertir les fichiers OpenOffice Writer au format PDF à partir de la ligne de commande à l'aide de unoconv -f pdf input.odt. Pour obtenir unoconv, exécutez simplement Sudo apt-get install unoconv sur le terminal. (rhyshale de rhyshale.wordpress.com)

23
Stefano Palazzo