Tenho certeza de que há uma maneira legal e limpa de fazer isso. Provavelmente via D-bus. Infelizmente, eu não sei o que é assim, então aqui está uma abordagem mais hacky. Você pode usar lsof
para imprimir os arquivos abertos por um processo em execução. A opção relevante aqui é (de man lsof
):
-c c selects the listing of files for processes executing the
command that begins with the characters of c. Multiple commands
may be specified, using multiple -c options. They are joined in
a single ORed set before participating in AND option selection.
Portanto, lsof -c vlc
listará todos os arquivos abertos pelos processos cujo nome começa com vlc
. Isso, no entanto, listará todos os tipos de coisas, incluindo várias bibliotecas e outras coisas que não nos interessam. O quarto campo da saída de lsof
(no meu Arch, pelo menos) é o descritor de arquivo do arquivo (para arquivos regulares) seguido por uma única letra descrevendo o modo no qual o arquivo foi aberto ( r
para leitura, neste caso). O quinto campo é o tipo de arquivo e, aqui, queremos que seja REG
para regular. Colocando tudo isso junto, obtemos (o -w
suprime os avisos):
$ lsof -wc vlc | awk '$4~"[0-9]r" && $5=="REG"'
vlc 16532 terdon 16r REG 8,19 131338 69731703 /path/to/foo.avi
Para obter apenas o nome do arquivo, você pode usar o GNU grep
:
$ lsof -wc vlc | awk '$4~"[0-9]r" && $5=="REG"' | grep -o '/.*'
/path/to/foo.avi
E para obter apenas o nome do arquivo:
$ lsof -wc vlc | awk '$4~"[0-9]r" && $5=="REG"' | grep -o '[^/]*$'
foo.avi