나는 종종 많은 PDF 파일을 열어 본다. 일반적으로 Chrome을 사용하여 다운로드하고 evince를 사용하여 즉시 엽니다.
때로는 동일한 문서 세트를 나중에 다시 열 수 있도록 열려 있는 모든 PDF 파일의 상태를 보존하고 싶을 때가 있습니다.
이는 동일한 문서 세트를 재부팅하고 다시 열어야 할 때 주로 발생하지만 때로는 나중에 사용할 수 있도록 열려 있는 문서 목록을 유지하고 싶을 때도 있습니다.
evince나 다른 프로그램에서 열려 있는 모든 PDF 파일의 이름을 가져오는 방법이 있습니까? 아니면 적어도 재부팅 후 동일한 문서 세트를 다시 열도록 장치에 요청하는 방법이 있습니까?
답변1
보고 있는 PDF의 확장자가 .pdf라고 가정하면 다음은 열려 있는 PDF 목록을 제공합니다.
$ lsof | grep ".pdf$"
Evince만 사용한 경우 Gilles의 비슷한 답변을 참조하세요. 내 컴퓨터(일부 PDF가 열려 있는 상태)에서 출력은 다음과 같이 나타납니다.
evince 6267 myuser 14u REG 252,0 363755 7077955 /tmp/SM.pdf
파일 이름을 얻으려면 다음을 사용할 수 있습니다 awk
.
$ lsof | grep ".pdf$" | awk '{print $9}'
아니면 더 나은,
$ lsof | awk '/.pdf$/ {print $9}'
이러한 결과를 파일에 저장할 수 있습니다.
$ lsof | awk '/.pdf$/ {print $9}' > openpdfs
그런 다음 복원합니다.
$ xargs -a openpdfs evince
이를 자동화하려면 데스크탑 환경에서 제공하는 메커니즘을 사용하여 종료 시 "저장" 명령을 실행하고 로그인 시 "열기" 명령을 실행할 수 있습니다. lsof
사용자가 반환된 PDF를 열 도록 하여 좀 더 견고성을 추가하세요. 이 방법의 장점 중 하나는 명령줄 인수를 사용하는 모든 PDF 뷰어에서 작동한다는 것입니다. 한 가지 단점은 파일 이름에 의존한다는 것입니다. 그러나 몇 가지 실험을 통해 파일 확장자를 알아야 한다는 요구 사항도 제거될 수 있습니다.
답변2
lsof
프로세스에서 열린 파일을 나열합니다. Evince는 파일을 열어두었습니다. Linux에서 evince를 사용하는 유일한 사람이라면 다음 단계에 따라 evince가 사용하는 파일을 확인하세요.
lsof -p $(pgrep -d, -x evince)
이 작업을 자동으로 수행하려면 evince 프로세스에 대해 일반 파일만 열어 두어야 합니다. 다음은 파일 이름을 출력하는 스크립트입니다.
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