Nautilus:通过符号链接访问目录,现在我无法在目标目录层次结构中上一级

15 nautilus symbolic-link

我通过“制作链接”选项创建了一个快捷方式。当我进入这个快捷方式的文件夹时,我看不到它上面的任何文件夹,所以我无法轻松导航到它们。

有没有办法在 GUI 中向上移动一个文件夹?也许是一个热键?(cd ..这次不行^__^)。

在此处输入图片说明


例如,在 Windows 中,我确实能够按照我描述的方式进行导航,这是一个解释它的 Win10 图像:

在此处输入图片说明

Jac*_*ijm 16

为什么这是一个具有挑战性的问题

这个问题有几个挑战:

  • nautilus 不直接从命令行通信,例如获取当前活动目录,也不能从命令行“发送”当前打开的文件夹 (-window) 到另一个目录。
  • 在当前路径中,根据通过 的请求"NAUTILUS_SCRIPT_CURRENT_URI",Nautilus 不会返回当前文件夹的真实路径,而是“看到”链接,就好像它是一个实际文件夹一样。

因此,解决方案很脏。我们需要找到解决方法。下面四个选项来解决这个问题。

1.右击上一级

要获得当前目录的真实路径,我们必须从链接中检索信息。我们可以通过ls -l在链接上使用来做到这一点,它将输出例如:

lrwxrwxrwx 1 jacob jacob 35 jan 15 08:23 /home/jacob/Bureaublad/Flyer_st/Verwijzing naar Site_current -> /home/jacob/Bureaublad/Site_current
Run Code Online (Sandbox Code Playgroud)

其中后面的部分->是符号链接内的真实路径,或者,使用python

real = os.path.realpath("/path")
Run Code Online (Sandbox Code Playgroud)

nautilus脚本中使用它,我们可以间接获得当前文件或文件夹的真实路径。

那么如果我们有路径,我们如何让鹦鹉螺向上移动一级?

同样,我们无法解决这个问题保持双手清洁。为了向上移动一级,我们首先稍微编辑找到的路径,从:

/path/to/a/folder
Run Code Online (Sandbox Code Playgroud)

进入

/path/to/a
Run Code Online (Sandbox Code Playgroud)

然后,使用xdotool模拟Ctrl+ L(将路径插入 nautilus 窗口的 GUI 快捷方式,因为没有使用当前窗口移动到另一个目录的 cli 选项),然后xclip粘贴编辑后的路径 + Enter,我们有一个可行的解决方案!

在实践中

  1. 我们在一个文件夹中,从我桌面上的链接(“电报链接”)打开。在真正的文件夹是我的子文件夹中Downloads的文件夹:

    在此处输入图片说明

  2. 然后,如果我们右键单击文件夹内的任何文件以运行脚本:

    在此处输入图片说明

  3. 自动插入上级目录的路径:

    在此处输入图片说明

  4. 并且,也会自动Return按下,我们将目录向上移动一级:

    在此处输入图片说明

剧本

lrwxrwxrwx 1 jacob jacob 35 jan 15 08:23 /home/jacob/Bureaublad/Flyer_st/Verwijzing naar Site_current -> /home/jacob/Bureaublad/Site_current
Run Code Online (Sandbox Code Playgroud)

如何设置

  1. 该脚本需要xdotoolxclip

    sudo apt-get install xdotool xclip
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建,如果它不存在,则目录

    ~/.local/share/nautilus/scripts
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将上面的脚本复制到一个空文件中,将其另存为level_up(无扩展名)~/.local/share/nautilus/scripts,并使其可执行

  4. 您可能需要注销并重新登录。
  5. 现在您应该能够通过右键单击文件(任何)> 脚本 > level_up来运行脚本:

    在此处输入图片说明


[编辑] 我更改了上面的脚本以将路径粘贴nautilus窗口中,而不是xdotool 输入它。它needs xclip需要安装,但它是一个重大改进,尤其是在很长的路径上。


2. 或者,在上级目录中打开一个新的 nautilus 窗口

可以xdotool通过让脚本在父目录中打开一个新的nautilus 窗口避免使用。脚本会更短:

real = os.path.realpath("/path")
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您不需要安装xdotool. 我们甚至可以通过关闭原始窗口并将新窗口放置在完全相同的位置(& 大小)来扩展脚本。

缺点是原始窗口的历史记录以这种方式丢失。

3.另一种解决方案:(自动)创建链接的替代方法

与现有链接无关,但是当从 GUI 使用时,用于.desktop在右键单击时自动创建可执行文件的 nautilus 脚本可能会有所帮助:

右键单击目录以创建快捷方式(表现为链接)

在此处输入图片说明

与符号链接不同,这些链接将带您到实际的文件夹,而不会表现为文件夹本身:

在此处输入图片说明

剧本

/path/to/a/folder
Run Code Online (Sandbox Code Playgroud)

如何使用

  1. 将脚本复制到一个空文件中,将其另存为make_link(无扩展名)~/.local/share/nautilus/scripts,并使其可执行
  2. 通过选择脚本作为右键单击选项来使用脚本,如第一张图片所示。.desktop将在同一目录中创建一个可执行文件,如果需要,将其移动到其他地方;链接路径是绝对的。

给链接一个有区别的图标

您可以为备用链接指定一个有区别的图标。如果您在目录中搜索/usr/share/icons“文件夹”,则会弹出许多有效选项。

如果在脚本中该行"Icon=folder",被替换为Icon=stock_folder-copy,(使用不带扩展名的图标名称),则我的系统上的结果是:

在此处输入图片说明

当然,您也可以使用自己的自定义图标,但如果您使用完整路径(不要使用~),则应包括图标的扩展名。

4. 用快捷键移动到上级目录

可能是最方便的选择;nautilus 窗口在前面,按快捷键向上移动一个目录。

剧本

/path/to/a
Run Code Online (Sandbox Code Playgroud)

使用

  1. 对于此解决方案,xclip和 都xdotool需要在您的系统上。

    sudo apt-get install xdodool xclip
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将脚本复制到一个空文件中,将其另存为level_up.py(任意位置)。

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

    python3 /path/to/level_up.py
    
    Run Code Online (Sandbox Code Playgroud)

NB快捷选项是有点在这种情况下,有限的,因为剧本本身将模拟Ctrl+L,和Ctrl+Alt+L会使你注销...Ctrl+\工作得很好我的系统上。

解释

此脚本也模拟Ctrl+ L,但它没有使用 nautilus' "NAUTILUS_SCRIPT_CURRENT_URI",而是用于xclip在 nautilus 窗口中复制自动选择的路径。与选项 1 一样,脚本然后计算实际路径并导出上级目录。

如果您更喜欢键盘而不是使用右键单击,则此选项可能很有用。