Como, em um script, posso determinar se um arquivo está sendo gravado por outro processo?

Como, em um script, posso determinar se um arquivo está sendo gravado por outro processo?

Sou muito novo em scripts bash, então posso estar latindo para a árvore errada, mas aqui está minha situação atual:

Em um script, eu começoescritório; para converter umestranhopara umpdf

Parece queescritóriose separa do processo do script e sai para fazer suas próprias coisas. Ok, tudo bem; Aplicativos GUI tendem a fazer isso ...

No entanto, preciso esperar até o novopdffoi totalmente escrito, pois meu próximo passo envolve processar esse novopdf.

(Até onde eu sei) Não posso utilizar o ID do processo do soffice, porque pode já ter sido um processo em execução antes do início do meu script: por exemplo.escritóriopode já estar aberto para atividade normal da GUI para outro documento/apresentação/planilha não relacionado.

O cerne da questão para mim é que antes que eu possa prosseguir, a escrita do novopdfdeve ser finalizado...

Existe alguma maneira de determinar quando um arquivo énão maisaberto para outro processo no modo "gravação"? ...

Responder1

Você pode usar lsof | grep /absolute/path/to/file.txtpara ver se um arquivo está aberto. Se o arquivo estiver aberto, este comando retornará o status 0, caso contrário retornará 256 (1).

Esteja ciente de que este comando levará um segundo, pois normalmente há muitos arquivos abertos a qualquer momento.

Você também pode usar lsof -c gedit, por exemplo, para ver qual arquivo o gedit abriu. Restringir a saída a um processo reduzirá o tempo de execução a praticamente zero.

Aqui está um script para esperar:

#!/bin/bash

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

Isso é executado enquanto um processo 'pyhton3.2' abre o arquivo 'test.py'. Assim que o arquivo é fechado, ele passa para 'eco concluído' e sai.

Eu coloquei 'sleep 0.5' lá para que o loop não sobrecarregue tanto a CPU. Caso contrário, usará 100% da CPU.

Bônus Parece haver uma maneira fácil de transformar odt em pdf:

Obrigado ao scls19fr no Fórum OOo por esta dica adorável. Você pode converter arquivos do OpenOffice Writer em PDF a partir da linha de comando usando unoconv -f pdf input.odtPara obter o unoconv, basta executar sudo apt-get install unoconvno terminal. (rhyshale de rhyshale.wordpress.com)

informação relacionada