如何从终端的 Firefox 选项卡中获取 URL?

Ami*_*ege 7 command-line firefox 16.04

有没有办法使用某种命令来获取这样的 URL?

pa4*_*080 8

很少有文件包含有关您的会话的信息:

  • ~/.mozilla/firefox/*.default/sessionstore-backups/recovery.js其中包含有关当前会话的信息,还包含关闭的选项卡和上一个会话的信息。Firefox 每 15 秒在此文件中创建一个备份。当 Firefox 关闭时,此文件不可用。

  • ~/.mozilla/firefox/*.default/sessionstore.js当 Firefox 浏览器关闭时,其中包含有关上次会话的信息。当 Firefox 打开时,此文件不可用。

  • ~/.mozilla/firefox/*.default/sessionstore-backups/previous.js 其中包含有关上一个会话的信息。

的内容分析recovery.js表明,对于每个选项卡,只有当前 URL 的条目包含 string attributes


一、当火狐打开时:

1.A. 如果你想从当前会话中获取所有打开标签的 URL,你可以使用这个命令:

cat $HOME/.mozilla/firefox/*.default/sessionstore-backups/recovery.js | \
sed "s/\\_closedTabs.*//" | \
sed "s/{/\n{/g" | \
egrep -o 'url.*attributes' | \
cut -d\" -f3
Run Code Online (Sandbox Code Playgroud)

* 请注意,您必须copy/paste所有行一起进入终端窗口并按Enter

在哪里:

  • cat $HOME/.mozilla/firefox/*.default/sessionstore-backups/recovery.js 将打印此文件的内容;
  • sed "s/\\_closedTabs.*//"将删除字符串之后的所有内容_closedTabs
  • sed "s/{/\n{/g" | \将在每个之前放置一个换行符{
  • egrep -o 'url.*attributes'将仅过滤以 开头url和结尾的行中的那些部分attributes。如果没有-o选项,包含字符串的整行将被过滤;
  • cut -d\" -f3"用作分隔符并仅过滤第 3 列。

在我的情况下,命令的输出是:

https://askubuntu.com/
https://www.mozilla.org/en-US/
Run Code Online (Sandbox Code Playgroud)

1.B. 如果您想一次获取当前会话和上一个会话的数据,您可以使用以下命令:

printf "\n# CurrentSession:\n"; \
cat $HOME/.mozilla/firefox/*.default/sessionstore-backups/recovery.js | \
sed "s/\\_closedTabs/\{\"url\":\"# ClosedTabs:\"attributes/g" | \
sed "s/\\lastSessionState/\{\"url\":\"# LastSession:\"attributes/" | \
sed "s/{/\n{/g" | \
egrep -o 'url":"*.*attributes*' | \
cut -d\" -f3 | \
sed "s/#/\n#/" \
; echo
Run Code Online (Sandbox Code Playgroud)

在哪里:

  • printf "\n# CurrentSession:\n";# CurrentSession:在两个换行符之间打印;
  • sed "s/\\_closedTabs/\{\"url\":\"# ClosedTabs:\"attributes/g"将替换字符串_closedTabs"url":"# ClosedTabs:"attributes整个“文件”(选件g);
  • sed "s/\\lastSessionState/\{\"url\":\"# LastSession:\"attributes/"将替换lastSessionState"url":"# LastSession:"attributes
  • sed "s/#/\n#/"将在每个#.
  • ; echo 将在底部添加一个空行。

在我的情况下,命令的输出是:

# CurrentSession:
https://askubuntu.com/
https://www.mozilla.org/en-US/

# ClosedTabs:
https://www.yahoo.com/

# LastSession:
https://askubuntu.com/
https://www.abv.bg/

# ClosedTabs:
https://www.google.com/gmail/about/
https://www.yahoo.com/
Run Code Online (Sandbox Code Playgroud)

2.A. 如果你想获得历史,你可以使用:

cat $HOME/.mozilla/firefox/*.default/sessionstore-backups/recovery.js | sed "s/\\_closedTabs.*//" | sed "s/{/\n{/g" | egrep 'url":"http*' | cut -d\" -f4
Run Code Online (Sandbox Code Playgroud)

在我的情况下,命令的输出是:

https://askubuntu.com/
https://www.google.bg/search?client=ubuntu&channel=fs&q=firefox&ie=utf-8&oe=utf-8&gfe_rd=cr&ei=pTKyWIitGqTs8wewj4KgDQ
https://www.mozilla.org/bg/firefox/new/
https://www.mozilla.org/en-US/
Run Code Online (Sandbox Code Playgroud)

2.B. 您可以在每个选项卡的数据之间放置一个分隔符:

cat $HOME/.mozilla/firefox/*.default/sessionstore-backups/recovery.js | \
sed "s/\\_closedTabs.*//" | \
sed "s/{/\n{/g" | \
sed "s/entries/url\":\"# TAB:/g" | \
egrep 'url":"*' | \
cut -d\" -f4 | \
sed "s/#/\n#/"
Run Code Online (Sandbox Code Playgroud)

在我的情况下,命令的输出是:

# TAB:
about:startpage
https://askubuntu.com/

# TAB:
https://www.google.bg/search?client=ubuntu&channel=fs&q=firefox&ie=utf-8&oe=utf-8&gfe_rd=cr&ei=pTKyWIitGqTs8wewj4KgDQ
https://www.mozilla.org/bg/firefox/new/
https://www.mozilla.org/en-US/
Run Code Online (Sandbox Code Playgroud)

3. 1.B. 和 2.B. 一起:

printf "\n# CurrentSession:\n"; \
cat $HOME/.mozilla/firefox/*.default/sessionstore-backups/recovery.js | \
sed "s/\\_closedTabs/\{\"url\":\"# ClosedTabs:/g" | \
sed "s/\\lastSessionState/\{\"url\":\"# LastSession:/" | \
sed "s/entries/url\":\"# TAB:/g" | \
sed "s/{/\n{/g" | \
egrep 'url":"*' | \
cut -d\" -f4 | \
sed "s/#/\n#/" \
; echo
Run Code Online (Sandbox Code Playgroud)

在我的情况下,命令的输出是:

# CurrentSession:

# TAB:
https://host.bg/
https://admin.host.bg/

# TAB:
https://www.mediawiki.org/wiki/MediaWiki

# TAB:
https://en.wikipedia.org/wiki/Main_Page

# ClosedTabs:

# TAB:
about:startpage
https://www.yahoo.com/

# LastSession:

# TAB:
about:startpage
https://askubuntu.com/

# ClosedTabs:

# TAB:
https://www.mozilla.org/en-US/
https://www.google.com/gmail/about/
Run Code Online (Sandbox Code Playgroud)

二、当 Firefox 关闭时:

当 Firefox 关闭时,您可以获取上次会话的数据。该方法与上面解释的相同,但recovery.js您不必使用sessionstore.js(或previous.js):

cat $HOME/.mozilla/firefox/*.default/sessionstore.js \
...
Run Code Online (Sandbox Code Playgroud)

参考:

  • 我在此文件夹中找不到 recovery.js。只有一个 recovery.jsonlz4 也不起作用。 (2认同)

dot*_*hen 5

2022答案

正如 Bao 提到的,得票最高的答案在现代 Firefox 中不再有效,因为它所依赖的文件有两个格式更改:

  1. 现在它是一个压缩文件,所以我们用来lz4jsoncat读取它。
  2. 识别该文件中当前选项卡和历史记录项的方法是不同的。现在我们必须对 上的选项卡进行排序lastAccessed,然后从index字段中找到正确的历史记录项。我更喜欢jq这样。

这一句应该可以做到:

lz4jsoncat ~/.mozilla/firefox/*.default-release/sessionstore-backups/recovery.jsonlz4 | jq -r ".windows[0].tabs | sort_by(.lastAccessed)[-1] | .entries[.index-1] | .url"
Run Code Online (Sandbox Code Playgroud)

要在 Ubuntu 上安装必备工具,请运行以下命令:

$ sudo aptitude install jq lz4json
Run Code Online (Sandbox Code Playgroud)