Em um one-liner de python:
python3 -c '[print(p+".pdf") for p in [s.split(".pdf")[0] for s in open("logfile").read().split("/") if ".pdf" in s]]'
em que "logfile"
é o caminho para o seu arquivo de log, entre aspas duplas. Um exemplo, usando a entrada da sua pergunta, em que /home/jacob/Bureaublad/pd.txt
é meu arquivo de log:
$ python3 -c '[print(p+".pdf") for p in [s.split(".pdf")[0] for s in open("/home/jacob/Bureaublad/pd.txt").read().split("/") if "pdf" in s]]'
test160511.pdf
test160511.pdf
Explicação
O comando:
-
divide o conteúdo do arquivo pelo dellimeter
/
(barra):open("logfile").read().split("/")
e procura as seções que contêm
pdf
:for s in open("/home/jacob/Bureaublad/pd.txt").read().split("/") if "pdf" in s
-
Subsequentemente, divide as strings encontradas pelo dellimeter
.pdf
e mantém a primeira seção, que é a seção entre/
epdf
. -
subsequentemente, a extensão é adicionada:
print(p+".pdf")
Desta forma, o nome do arquivo do pdf é sempre recuperado corretamente, mesmo que o nome do arquivo (pdf-) contenha espaços.
Apenas nomes de arquivos exclusivos?
Se você não quiser repetir nomes de arquivos com várias ocorrências:
python3 -c '[print(p+".pdf") for p in set([s.split(".pdf")[0] for s in open("logfile").read().split("/") if "pdf" in s])]'
Do mesmo exemplo:
$ python3 -c '[print(p+".pdf") for p in set([s.split(".pdf")[0] for s in open("/home/jacob/Bureaublad/pd.txt").read().split("/") if "pdf" in s])]'
test160511.pdf