É possível obter uma lista de todos os arquivos abertos (e os programas que estão sendo usados para visualizá-los)?

3

Eu quero escrever um script que obtenha uma lista de todos os programas e arquivos abertos e, em seguida, gere um script de shell para reabrir esses arquivos. Por exemplo, se eu estivesse editando o arquivo example.txt usando gedit e editando o arquivo myscript.js usando geany, eu gostaria de gerar um script que pudesse reabrir esses dois arquivos usando seus respectivos programas. Existe alguma maneira de obter uma lista de programas e arquivos em execução a partir da linha de comando?

    
por Anderson Green 29.12.2012 / 02:34

3 respostas

3

Geralmente, não é possível fazer da maneira como você está se aproximando, porque os arquivos abertos em um editor de texto não estão "abertos" no sentido em que os programadores usam o termo (isto é, "ter um identificador de arquivo ativo em algum lugar o programa que pode ser usado para operações de E / S "). O que a maioria dos programas faz é abrir o arquivo, ler os dados em um buffer de memória e fechar o arquivo. Salvar um arquivo é o mesmo - abra, escreva, feche. Entre abrir e salvar operações, o arquivo não é "aberto", é apenas a cópia dos dados no buffer do programa na memória.

Portanto, geralmente não é possível descobrir quais arquivos estão atualmente carregados na memória do programa - no entanto, o próprio programa sabe disso, portanto, de dentro do programa é trivial implementar uma opção. para lembrar a lista de arquivos abertos no desligamento e reabrir esses arquivos na inicialização. Muitos editores de texto, por exemplo, o Kate e o Sublime Text 2, fornecem essa opção.

Alguns ambientes de desktop, como o KDE (e também o antigo Gnome, não tenho certeza sobre o Gnome 3 / Unity), também oferecem uma opção para salvar a lista de programas em execução no desligamento e reiniciar esses programas na inicialização. O que combinado com o uso de um bom editor, consegue o que você está tentando fazer.

    
por Sergey 29.12.2012 / 03:51
1

O comando ps aux exibirá uma lista de processos em execução. Em alguns casos, ele também listará os arquivos que estão sendo editados com esses programas, se o nome do arquivo tiver sido usado como um argumento de linha de comando ao iniciar o processo. Por exemplo, eu abri o arquivo stuff.txt usando gedit, e gedit /home/anderson/Desktop/stuff.txt foi exibido na saída de ps aux .

    
por Anderson Green 29.12.2012 / 03:12
0

Há um truque que você pode tentar [pode estar no gnome]

este show arquivos abertos por um processo [não pode atualmente usando]

Arquivo de histórico

  

/home/$USER/.local/share/recently-used.xbel

pode ajudar você.

  1. Primeiro, tire uma cópia de recentemente usado.xbel
  2. Execute o processo e saia [abra o arquivo, feche-o. abrir arquivo, fechá-lo e assim por diante ... e sair]
  3. agora compare recentemente-used.xbel com o antigo recentemente usado.xbel
  4. do extrato do diff nome do arquivo e processo associado

Para uma DEMO basta copiar colar

diff <(cat ~/.local/share/recently-used.xbel) <(gedit /tmp/2.txt; cat ~/.local/share/recently-used.xbel)

da saída, você pode extrair nome de arquivo e processo.

    
por totti 17.01.2013 / 11:26

Tags