
私はしばしば多くの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を開くようにして、より堅牢性を追加します。この方法の利点の1つは、コマンドライン引数を使用するすべてのPDFビューアで機能することです。 1つの欠点は、ファイル名に依存することです。ただし、いくつかの実験では、ファイル拡張子を知る必要があるという要件も排除できます。
答え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