recuperando nomes de todos os arquivos PDF abertos (em evince ou de outra forma)

4

Eu constantemente tenho muitos arquivos PDF abertos. Estes geralmente são baixados usando o chrome e imediatamente abertos usando o evince.

Às vezes, quero manter o estado de todos os meus arquivos PDF abertos, para que eu possa reabrir o mesmo grupo de documentos mais tarde.

Isso acontece principalmente quando eu preciso reiniciar e o que ter o mesmo conjunto de documentos reaberto, mas às vezes eu só quero manter uma lista de documentos abertos para mais tarde.

Existe uma maneira de obter os nomes de todos os arquivos PDF abertos, desde o evince ou qualquer outro programa? ou, pelo menos, há uma maneira de pedir ao Evince para reabrir o mesmo conjunto de documentos após uma reinicialização?

    
por Yoav 09.01.2011 / 17:57

2 respostas

2

Supondo que os PDFs que você está visualizando tenham a extensão .pdf, o seguinte pode funcionar para obter uma lista de PDFs abertos:

$ lsof | grep ".pdf$"

Se você só usa Evince, veja a resposta similar de Gilles. Na minha máquina (com alguns pdfs abertos), a saída exibida é a seguinte

evince    6267     myuser   14u      REG    252,0   363755    7077955 /tmp/SM.pdf

Para obter apenas os nomes dos arquivos, podemos usar awk :

$ lsof | grep ".pdf$" | awk '{print $9}'

ou melhor ainda,

$ lsof | awk '/.pdf$/ {print $9}'

Podemos salvar esses resultados em um arquivo:

$ lsof | awk '/.pdf$/ {print $9}' > openpdfs

e mais tarde, para restaurá-los:

$ xargs -a openpdfs evince

Para que isso aconteça automaticamente, você pode usar quaisquer mecanismos que seu ambiente de desktop forneça para executar o comando "save" ao sair e o comando "open" no login. Um pouco mais de robustez pode ser adicionado, garantindo que os PDFs retornados por lsof estejam sendo abertos pelo usuário. Uma vantagem deste método é que ele deve funcionar para qualquer visualizador de pdf que possua argumentos de linha de comando. Uma desvantagem é que isso depende dos nomes dos arquivos; no entanto, com um pouco de cutucão, o requisito de saber a extensão do nome do arquivo provavelmente também pode ser removido.

    
por 09.01.2011 / 18:36
2

lsof lista os arquivos abertos por um processo. Evince mantém os arquivos abertos. Se você é o único usuário usando o evince, no Linux, veja como os arquivos estão sendo usados:

lsof -p $(pidof evince)

Para automatizar isso, você deve manter apenas os arquivos regulares abertos do processo evince. Aqui está um script que gera os nomes dos arquivos.

lsof -n -d0-9999 -Fpctn |  # parseable output, pid/command/type/name, only open files
sed 's/^p/\np/' |  # split each process into a paragraph
awk -vRS= '/\ncevince\n/ {print}' |  # retain only paragraph(s) with command="evince"
sed 's/^t/\nt/' |  # split each file into a paragraph
awk -vRS= '/^tREG\n/ {print substr($0, 7);}'  # retain only regular files
    
por 09.01.2011 / 18:39