是否有可能意识到ls
Mac hidden
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
文件标志的文件(实际上并未在终端中隐藏),以及真的名称以点开头的隐藏文件。
有没有办法,例如使用别名或可靠的 shell 函数,使标记的和文件得到相同的ls
处理,即默认隐藏并用 或 显示,类似于 Finder 根据 的值表现的方式?hidden
.dothidden
ls -A
ls -a
defaults read com.apple.Finder AppleShowAllFiles
我知道man chflags
特别提到的hidden
标志只会从 GUI(即 Finder)中隐藏。
答案1
这些是获取 OS X 的步骤ls
,该程序会使用隐标志,除非-a/-A
指定了选项,类似于点文件。
- 安装Xcode。我下面使用的是Xcode 4.5.1。
- 下载您的操作系统版本
libutil
并file_cmds
从http://www.opensource.apple.com。每个软件包列表条目的右侧都有一个下载按钮。本指南是为 OS X 10.8.2 编写的,如果您使用的是其他版本,请根据以下确切步骤操作。 - 提取两个档案。
在Xcode中打开
file_cmds.xcodeproj
并选择构建ls
目标。file_cmds
在左侧选择Xcode 项目,然后ls
在主区域中选择目标。在构建设置标签,寻找标题搜索路径在里面标头类别并将路径添加到您解压的文件夹的位置libutil
。打开左侧文件夹
print.c
中的文件,删除显示 的行。然后保存文件。这ls
#include <membershipPriv.h>
应该破坏某些东西,因为包含在那里是有原因的,但我还没有确定它是什么。打开同一文件夹中的文件,查找函数中的
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; }
按Cmd-B进行构建。
选择产品在左侧(文件夹列表末尾)单击右键
ls
。选择在 Finder 中显示。将可执行文件移动到
ls
方便的位置,例如您的主目录。然后打开终端并运行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