Nautilus 上下文菜单中的新上下文条目

Nautilus 上下文菜单中的新上下文条目
  1. 我在 nautilus 中打开一个包含大约 100 个文件的目录
  2. 我通过查看文件预览选择了 N 个(可能是 10 个)文件。
  3. 现在我想点击快捷方式并调用我的自定义脚本。
  4. 我的自定义脚本接收文件名并执行我想要的操作。

如何在 gnome/ubuntu/nautilus 中注册一个自定义操作来接收在 nautilus 中选择的文件名?

Nautilus 上下文菜单中的新上下文条目

如果您在 ~/.local/share/nautilus/scripts 中编写脚本,那么您会在上下文菜单中获得一个新条目。如何通过快捷方式调用此脚本?

背景

这是Nautilus:将目录中的文件标记为收藏

版本

我使用 Ubuntu 16.04

答案1

对选定的文件运行操作

下面的答案首先会从字面上回答您的问题;

如何调用脚本并使用当前选定的文件作为参数[1]

然而,链接问题中接受的答案使用鹦鹉螺脚本,它将文件作为来自 nautilus 的参数。这不起作用,仅当单击鼠标右键时nautilus。[2]因此,在 中,我将链接问题中的脚本的功能添加到了答案中,因此您只需[2]从快捷方式运行其中之一(在 中)。


[1]对于 16.04 及更高版本*,以选定的文件作为参数运行脚本

您可以简单地使用下面的简短脚本。它将“读取”当前选定的文件并以文件作为参数运行您的脚本。

#!/usr/bin/env python3
import subprocess
import pyperclip
import time

time.sleep(1)
subprocess.call(["xdotool", "key", "Control_L+c"])

for item in pyperclip.paste().splitlines():
    subprocess.Popen(["/path/to/script", item])

使用

  1. 安装python3-pyperclipxdotool

    sudo apt install python3-pyperclip xdotool
    
  2. 将上面的脚本复制到一个空文件中,保存为run_withselected.py脚本中的Replace

    "/path/to/script" 
    

    通过要运行的脚本的实际路径。使用绝对路径,用引号引起来。

  3. 将其添加到快捷键:选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。单击“+”并添加命令:

    python3 /path/to/run_withselected.py
    

[2]然而

请注意,来自其他答案的链接 nautilus 脚本不会像这样运行,因为它以另一种方式检索其参数直接从 nautilus.因此我合并链接问题中的脚本的功能与上面的脚本的功能相同。

那么您不再需要其他答案中的其他脚本。

A. 通过更改名称来指定文件

选择文件

在此处输入图片描述

按快捷键标记(切换)文件

在此处输入图片描述

#!/usr/bin/env python3
import subprocess
import pyperclip
import shutil
import os
import time

time.sleep(1)

def npath(p, f):
    return os.path.join(p, f)

subprocess.call(["xdotool", "key", "Control_L+c"])
for item in pyperclip.paste().splitlines():
    data = item.rsplit("/", 1); path = data[0]; name = data[1]
    newname = name[2:] if name.startswith("*0") else "*0"+name
    shutil.move(npath(path, name), npath(path, newname))

B. 通过在“收藏夹”目录中创建链接来指定文件

选择文件

在此处输入图片描述

按快捷键在“我的收藏夹”中创建(切换)链接

在此处输入图片描述

#!/usr/bin/env python3
import subprocess
import pyperclip
import shutil
import os
import time

fav = os.path.join(os.environ["HOME"], "My_Favorites")

try:
    os.mkdir(fav)
except FileExistsError:
    pass

time.sleep(1)

subprocess.call(["xdotool", "key", "Control_L+c"])
for item in pyperclip.paste().splitlines():
    name = item.rsplit("/", 1)[-1]
    link = os.path.join(fav, name)
    try:
        os.symlink(item, link)
    except FileExistsError:
        os.remove(link)

使用(任一个)

  1. 脚本python3-pyperclip需要xdotool

    sudo apt install python3-pyperclip xdotool
    
  2. 将上述脚本复制到一个空文件中,另存为toggle_selected.py

  3. 添加快捷键:选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”,点击“+”,添加命令:

    python3 /path/to/toggle_selected.py
    

解释

  1. 脚本使用xdotool虚拟按下Ctrl+C
  2. 随后,脚本(内部)创建选定文件的列表:

    pyperclip.paste().splitlines()
    
  3. 这些文件随后被用作重命名文件的参数:

    for item in pyperclip.paste().splitlines():
        data = item.rsplit("/", 1); path = data[0]; name = data[1]
        newname = name[2:] if name.startswith("*0") else "*0"+name
        shutil.move(npath(path, name), npath(path, newname))
    

    或者创建一个符号链接:

    for item in pyperclip.paste().splitlines():
        name = item.rsplit("/", 1)[-1]
        try:
            os.symlink(item, os.path.join(fav, name))
        except FileExistsError:
            os.remove(link)
    
  4. 最后time.sleep(1)要确保“真实”按键不会干扰模拟按键xdotool

    笔记

    • 在链接的答案中,第二脚本创建了链接,但并未切换。我让答案“B”也切换符号链接的存在。
    • 如果是针对已发布的应用程序,我会将 A 和 B 合并为一个脚本,并在设置文件中决定要采取什么操作。我可能会稍后添加。

*14.04

...需要不同的步骤来安装 pyperclip:

sudo apt-get install python3-pip xdotool
sudo pip3 install pyperclip

相关内容