使ls知道“隐藏”文件标志


12

是否可以ls注意到hiddenMac OS X上的文件标志?

当前,一个简单的ls -lO产生:

$ ls -lO
total 0
drwxr-xr-x@  84 danielbeck  staff  -      2856 29 Mai 22:44 Applications
drwx------+ 158 danielbeck  staff  -      5372 29 Mai 15:27 Desktop
drwx------@ 250 danielbeck  staff  -      8500 30 Mai 20:40 Documents
drwx------+  11 danielbeck  staff  -       374 29 Mai 22:21 Downloads
drwx------@  84 danielbeck  staff  -      2856 29 Mai 22:48 Library
drwx------@   3 danielbeck  staff  hidden  102  3 Apr 20:45 Movies
drwx------@   5 danielbeck  staff  hidden  170  3 Apr 20:45 Music
drwx------+ 215 danielbeck  staff  -      7310 29 Mai 22:54 Pictures
drwxr-x---@   7 danielbeck  staff  hidden  238  3 Apr 20:45 Public
drwxr-xr-x@   4 danielbeck  staff  hidden  136 24 Apr 23:25 Sites

因此,我们具有三种可见性:常规的可见文件,带hidden文件标志的文件(实际上并未在Terminal中隐藏)以及名称以点开头的真正隐藏的文件。

有没有一种方法,例如使用别名或可靠的外壳功能,使ls治疗hidden标记,并.dothidden在默认情况下并显示与文件相同的,即隐藏ls -Als -a类似于搜索的行为方式取决于价值defaults read com.apple.Finder AppleShowAllFiles

我知道,man chflags特别提到的hidden标志仅对GUI隐藏,即Finder。

Answers:


8

这些是获取OS X的步骤,除非指定了选项,否则OS X ls会隐藏带有hidden标志的-a/-A文件,类似于点文件。

  1. 安装Xcode。我在下面使用Xcode 4.5.1。
  2. 下载您的操作系统版本的libutilfile_cmdshttp://www.opensource.apple.com。每个软件包列表条目的右侧都有一个下载按钮。本指南是为OS X 10.8.2,YMMV编写的,如果您使用的是其他版本,则按照以下确切步骤进行操作。
  3. 提取两个档案。
  4. file_cmds.xcodeproj在Xcode中打开,然后选择以构建ls目标。

    屏幕截图

  5. 选择左侧的file_cmdsXcode项目,然后ls在主区域中选择目标。在“ 构建设置”选项卡中,在“ 标题”类别中查找“ 标题搜索路径”,然后将路径添加到您提取的文件夹中。libutil

    屏幕截图

  6. 在左侧print.cls文件夹中打开文件,然后删除行#include <membershipPriv.h>。之后保存文件。这应该会破坏某些东西,因为其中包含其中是有原因的,但是我尚未确定它是什么。

  7. ls.c在同一文件夹中打开文件,然后/* Only display dot file if -a/-A set. */display函数中查找注释。将其及其下面的条件替换为以下内容:

    /* Only display dot file and file with hidden flag if -a/-A set. */
    sp = cur->fts_statp;
    if (((sp != NULL && (sp->st_flags & 0x8000)) || cur->fts_name[0] == '.') && !f_listdot) {
        cur->fts_number = NO_PRINT;
        continue;
    }
    
  8. Cmd- B建立。

    成功!

  9. 选择左侧的产品(文件夹列表的末尾),然后单击鼠标右键ls。选择在Finder中显示

    构建输出文件夹截图

  10. ls可执行文件移到方便的位置,例如您的主目录。然后打开Terminal并运行sudo mv $HOME/ls /bin/ls,或者甚至更好的方法是,bin在您的主目录中创建一个新文件夹并将其移动到该目录中。PATH然后将该文件夹添加到您的文件夹中。

测试结果:

$ mkdir test
$ cd test
$ touch foo bar
$ chflags hidden bar
$ /bin/ls -lO
total 0
-rw-r--r--@ 1 danielbeck  staff  hidden 0 25 Okt 22:25 bar
-rw-r--r--  1 danielbeck  staff  -      0 25 Okt 22:25 foo
$ $HOME/bin/ls -lO
total 0
-rw-r--r--  1 danielbeck  staff  - 0 25 Okt 22:25 foo
$ $HOME/bin/ls -A
bar foo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.