열려 있는 모든 PDF 파일의 이름을 검색합니다(명백하거나 그렇지 않은 경우).

열려 있는 모든 PDF 파일의 이름을 검색합니다(명백하거나 그렇지 않은 경우).

나는 종종 많은 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

관련 정보