如何在Thunar和Nautilus中隐藏一个目录,而不需要在其名称前加点符号?

通常,Linux 程序会将用户的设置存储在 ~/.* 目录中。但不幸的是,一些开发者(我需要的某些应用程序的开发者)没有遵循这个规则,他们并未以点号开头命名其设置存储文件夹。这导致从未被使用过的文件夹杂乱无章地(也许不完全准确,因为它们并不多,但仍然很烦人)出现在主目录中。重命名它们并不是一个选择,因为在这种情况下,应用程序将无法找到它们(并会再次创建它们)。

有没有办法在常见的文件系统浏览器中隐藏没有以点号开头命名的文件夹,例如 Thunar、XFCE 以及 Midnight Commander 和 Krusader(如果了解 Nautilus 也不介意的话)?

3个回答

Nautilus(更新:现在Thunar也可以使用)将隐藏位于同一目录中的文件.hidden中列出的任何文件或文件夹。
在Nautilus中隐藏文件夹有两种方法:
Nautilus脚本
将以下代码保存在您的主文件夹中的新文件中。将其命名为“Hide”。
```python #!/usr/bin/env python
import commands from os.path import join
files = commands.getoutput("echo $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS") cwd = commands.getoutput("echo $NAUTILUS_SCRIPT_CURRENT_URI") cwd = cwd[7:]
for f in files.split(" /"):
f = f.split("/")[-1]
commands.getoutput("echo "+f+" >> "+join(cwd, ".hidden")) ```
运行以下命令来安装脚本:
``` cp Hide ~/.local/share/nautilus/scripts/ && chmod u+x ~/.local/share/nautilus/scripts/Hide ```
在Nautilus中,选择一个或多个文件/文件夹,右键单击。从“脚本”菜单中选择“隐藏”:
重新加载当前位置(F5),选定的文件/文件夹将被隐藏。

命令行

假设你想要隐藏一个名为“Rick Astley's Greatest Hits”的文件夹,只需运行以下命令:

echo "Rick Astley's Greatest Hits" >> .hidden

2正是我希望得到的答案。但不幸的是,对于Thunar来说并不适用。 - Ivan
@Ivan,希望他们最终会添加它,请看我回答中链接的错误报告。 - Isaiah
为什么要用双引号“ObnoxiousFolder”? - karthick87
鉴于情况,这个错误报告被标记为“不予修复”(在我看来相当粗鲁),尽管已经有一个补丁可用,但项目维护者基本上表示“我不在乎”。我们需要另一个解决方案... - waldyrious
1最近版本的Thunar支持这一功能,因为它们使用GIO来确定隐藏目录,并且GIO现在实现了对.hidden文件的支持。 - Brian Campbell
虽然脚本不错,但我更喜欢使用Python自己的IO。根据https://help.ubuntu.com/community/NautilusScriptsHowto,`NAUTILUS_SCRIPT_SELECTED_FILE_PATHS`是以换行符分隔的,所以你的`for ... split应该用()而不是(" /")吧?(斜杠无关紧要,因为你只需要取basename,顺便说一下,你可以使用[os.path.basename`](http://stackoverflow.com/q/22272003/321973)) - Tobias Kienzler

打开Synaptic并搜索"nautilus-hide"进行安装。注销并重新登录。现在右键单击任何文件或文件夹。您将在上下文菜单中看到一个"隐藏"选项。
它不会修改名称,而是隐藏文件夹。

我修改了 Alvin的好脚本,希望它更符合Python的风格(如果添加了许多文件,还可能更快,因为.hidden只会被打开一次)。
#!/usr/bin/env python

import os

files = os.environ["NAUTILUS_SCRIPT_SELECTED_FILE_PATHS"].split()
# According to https://help.ubuntu.com/community/NautilusScriptsHowto
# the list is newline-delimited, which is split()'s default separator

# No need for NAUTILUS_SCRIPT_CURRENT_URI
cwd = os.path.dirname(files[0])
# Assuming all selected files are in the same path, I cannot imagine why not

# Instead of relying on "echo ... >> ..." use Python's IO:
with open(os.path.join(cwd, ".hidden"), "a") as hidden:
    hidden.write("\n".join(
        [os.path.basename(f) for f in files.split()]))