Nautilus:通过键盘快捷方式对所选文件进行自定义操作

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

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

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

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

背景

这是Nautilus的后续问题:将目录中的文件标记为collections夹

我使用的是Ubuntu 16.04

对所选文件运行操作

下面的答案将首先回答你的问题;

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

但是,链接问题中接受的答案使用了nautilus脚本 ,它将文件作为nautilus的参数。 只有 nautilus中右键单击时, 这不适用于快捷方式 。 在[2] ,我因此将链接问题中的脚本function添加到答案中,因此您只需从快捷方式中运行其中任何一个(在[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替换脚本

     "/path/to/script" 

    通过您要运行的脚本的实际路径。 在引号中使用绝对路径

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

     python3 /path/to/run_withselected.py 

[2]但是

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

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

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.通过在“collections夹”目录中创建链接来指定文件

选择文件

在此处输入图像描述

按快捷方式在“My_Favorites”中创建(切换)链接

在此处输入图像描述

 #!/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-pyperclipxdotool

     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