Как в сценарии можно определить, записывается ли файл в настоящий момент другим процессом?

Я очень новичок в создании сценариев bash, поэтому я мог бы лаять неправильное дерево, но вот моя текущая ситуация:

В сценарии я запускаю soffice ; для преобразования odt в pdf

Кажется, что soffice отрывается от процесса скрипта и уходит, чтобы сделать свое дело. Хорошо, все в порядке; Приложения GUI имеют тенденцию делать это ...

Однако мне нужно подождать, пока новый pdf не будет полностью написан, так как мой следующий шаг включает в себя обработку этого нового pdf .

(Насколько я знаю) я не могу использовать идентификатор процесса soffice, потому что он, возможно, уже был запущенным процессом до запуска моего скрипта: например. soffice может быть уже открыт для нормальной работы GUI для другого несвязанного документа /презентации /электронной таблицы.

Суть вопроса для меня в том, что, прежде чем я смогу продолжить, нужно написать новую pdf ...

Есть ли способ определить, когда файл больше не открыт для другого процесса в режиме «записи»? ...

17 голосов | спросил Peter.O 21 72010vEurope/Moscow11bEurope/MoscowSun, 21 Nov 2010 07:39:01 +0300 2010, 07:39:01

1 ответ


20

Вы можете использовать lsof | grep /absolute/path/to/file.txt, чтобы увидеть, открыт ли файл. Если файл открыт, эта команда вернет статус 0, иначе он вернет 256 (1).

Имейте в виду, что эта команда займет секунду, так как обычно в любое время открывается много файлов.

Вы также можете использовать lsof -c gedit, чтобы узнать, какой файл gedit открыт. Ограничение вывода на один процесс сократит время выполнения практически до нуля.

Вот сценарий для ожидания:

#!/bin/bash

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

Это выполняется, когда процесс «pyhton3.2» получил файл «test.py». Как только файл закрыт, он переходит к «эхо-завершению» и завершает работу.

Я поставил «sleep 0.5» там, чтобы цикл не сильно зависал CPU. В противном случае он будет использовать 100% -ный процессор.

Bonus Кажется, есть простой способ заключить odt в pdf:

  

Благодаря scls19fr на форуме OOo   для этого прекрасного наконечника. Вы можете конвертировать   Файлы OpenOffice Writer для PDF из   в командной строке с помощью unoconv -f pdf input.odt Чтобы получить unoconv, просто запустите   sudo apt-get install unoconv на   Терминал.    (rhyhale of rhyshale.wordpress.com)

ответил Stefano Palazzo 21 72010vEurope/Moscow11bEurope/MoscowSun, 21 Nov 2010 08:32:00 +0300 2010, 08:32:00

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132