如何在Nautilus中隐藏文件和文件夹?

我想使用Nautilus隐藏根目录(/)中的大部分文件夹。可能我只想显示/home/tmp这两个文件夹。
除了隐藏文件夹之外,我还想隐藏两个文件:initrd.imginitrd.img.old
我认为这样的设置对于新手来说很专业,并且看起来更加时尚。我该如何隐藏这些文件夹和文件呢?

你想在文件管理器(例如Gnome的Nautilus或KDE的Dolphin)中隐藏它,还是整个系统都要隐藏?据我所知,后者是不可能的(文件系统层次结构标准)。 - gertvdijk
2任何文件管理器。但我正在使用Nautilus。所以如果我只能在Nautilus中隐藏文件夹,我就会很开心! :) - blade19899
@blade19899 那么你的回答是正确的。在这里适用。请更新你的问题为“鹦鹉螺”。 - gertvdijk
3个回答

在Ubuntu 12.04/12.10上的Nautilus 3.4.2下进行测试(但几乎适用于所有情况)

打开gnome-terminalCtrl+Alt+T)。

输入ls -1 /

复制您想要隐藏的文件夹的名称。

按下Alt+F2,然后输入gedit

将您想要隐藏的所有名称粘贴如下:

hidden

图像摘自在Ubuntu中隐藏文件夹的另一种方法Meilin撰写

将文件保存(按Ctrl+S)到目录/中,命名为.hidden(没有星号,如上图所示)。

刷新页面,它们就会消失。

hidden-folders

图片来自如何隐藏文件和文件夹 - EuroBytes

如果您以后想要将它们显示出来...

要显示这些文件夹,您可以选择以下方法之一:

  • .hidden文件中删除它们的名称,或者
  • 只需按下Ctrl+H键即可查看所有隐藏的文件和文件夹。

参考资料:


2在Nautilus中完美运作。请提及文件名应为.hidden(与屏幕截图中的星号不同)。F5(刷新)似乎足以让Nautilus意识到它。不幸的是,它的工作方式是选择退出而不是选择加入。 - gertvdijk
将文件保存(Ctrl+S)在目录 /" ... 应该放置在 ~$HOME 中,而不是 / - 15 Volts
@gertvdijk:只是为了澄清一下,屏幕截图中显示的星号不是文件名的一部分,它只是Gedit界面的指示器,表示文件已更改但尚未保存。 - MestreLion
在Thunar中似乎也能正常工作。 - paradroid

我怀疑你很难轻松地实现这个,这在Unix模型中要么全部要么没有,没有“查看目录内容”的权限。一旦你有足够的访问权限来读取一个目录,那么你就可以读取所有东西(即文件夹/文件的列表)。
chmod o-r / 可以隐藏所有目录,但我不建议在没有先在虚拟机上进行测试并完全理解你所做的操作之前这样做。
使用自定义内核模块可以隐藏文件夹,但这相当复杂且容易出错。

在文件夹前面加一个点会有帮助吗?像这样'.media'。 - blade19899
这将需要更改每个程序的路径(例如,/.etc与/etc不同),因此所有程序很可能会出现故障,系统将无法启动。 - Misc
太糟糕了,我会在虚拟机中尝试一些东西,使用12.04 amd64版本。稍后我会发布结果。 - blade19899

这是@blade19899答案的补充。
动机
将文件名放在 .hidden 文件中会隐藏它们,但 nautilus 只检查精确匹配。在某些情况下,我们希望按模式而不是精确名称来隐藏文件--例如,我不喜欢看到 LaTeX 辅助文件。
解决方法
我的解决方法是将 .hidden 分成两个部分,用至少 5 个等号(即 =====)分隔。模式应该放在这个分隔符之前。然后,一个脚本(见下文)会在分隔符之后添加精确的文件名,完成文件。
实际上,您需要手动运行此脚本以更新与新匹配项的文件。也许将此文件添加为 FilemanagerActions 是一个好主意。
脚本
无参数运行:
import glob
from pathspec import PathSpec


def main():
    patterns = find_patterns('.hidden')
    files = ls()
    matches = find_matches(patterns, files)
    update_dothidden(patterns, matches)


def find_patterns(filepath):
    patterns = []
    with open(filepath) as f:
        lines = f.readlines()
    for line in lines:
        if line[0:5] == '=====':
            break
        patterns.append(line)
    return patterns


def ls():
    return glob.iglob('**/**', recursive=True)


def find_matches(patterns, files):
    path_spec = PathSpec.from_lines('gitwildmatch', patterns)
    return filter(path_spec.match_file, files)


def update_dothidden(patterns, matches):
    with open('.hidden', 'w') as f:
        for pattern in patterns:
            f.write(pattern)
        f.write('======================\n\n')
        for match in matches:
            f.write(match + '\n')
        f.write("\n# For usage, see https://github.com/m2-farzan/dothidden-patterns")


if __name__ == '__main__':
    main()

脚本的最新版本:https://github.com/m2-farzan/dothidden-patterns/blob/main/refresh_dothidden.py

示例

将此内容放入 .hidden 文件中:

*.aux
*.bbl
*.blg
*.log
*.synctex.gz

执行:
~/my_scripts/refresh_dothidden.py

更新的.hidden文件:
*.aux
*.bbl
*.blg
*.log
*.synctex.gz
======================

dstar_main.aux
main.aux
main.bbl
main.blg
main.log
main.synctex.gz
mrpp_central.aux
tikzhead.aux