Ls僅使用
僅使用 ls
顯示源文件和目標連結文件
我可以顯示連結指向的目標文件
ls -l
:snowch$ ls -l /usr/local/bin/mvn lrwxr-xr-x 1 snowch admin 29 12 Dec 08:58 /usr/local/bin/mvn -> ../Cellar/maven/3.2.3/bin/mvn
有沒有一種方法可以顯示更少的輸出,而不必通過另一個命令(例如 awk)進行管道傳輸?例如:
snowch$ ls ?? /usr/local/bin/mvn /usr/local/bin/mvn -> ../Cellar/maven/3.2.3/bin/mvn
我在 OS X 10.9.5 上執行 3.2.53。幾個命令的輸出如下所示:
snowch$ ls -H /usr/local/bin/mvn /usr/local/bin/mvn snowch$ ls -L /usr/local/bin/mvn /usr/local/bin/mvn snowch$ file /usr/local/bin/mvn /usr/local/bin/mvn: POSIX shell script text executable snowch$ file -b /usr/local/bin/mvn POSIX shell script text executable
ls
不幸的是,沒有選項可以檢索文件屬性並以任意方式顯示它們。一些系統為此有單獨的命令(例如 GNU 有一個stat
命令或 GNU 中的功能find
)。在大多數具有大多數文件的現代系統上,這應該可以工作:
$ ln -s '/foo/bar -> baz' the-file $ LC_ALL=C ls -ldn the-file | sed ' 1s/^\([^[:blank:]]\{1,\}[[:blank:]]\{1,\}\)\{8\}//' the-file -> /foo/bar -> baz
這通過刪除輸出的第一行的前 8 個空白分隔欄位來工作
ls -l
。這應該可以工作,除非系統中沒有顯示 gid,或者當有大量連結時前 2 個欄位連接在一起。使用 GNU
stat
:$ LC_ALL=C stat -c '%N' the-file 'the-file' -> '/foo/bar -> baz'
使用 GNU
find
:$ find the-file -prune \( -type l -printf '%p -> %l\n' -o -printf '%p\n' \) the-file -> /foo/bar -> baz
使用 FreeBSD/OS/X 統計數據:
f=the-file if [ -L "$f" ]; then stat -f "%N -> %Y" -- "$f" else printf '%s\n' "$f" fi
有
zsh
統計:zmodload zsh/stat f=the-file zstat -LH s -- "$f" printf '%s\n' ${s[link]:-$f}
許多系統也有
readlink
專門獲取連結目標的命令:f=the-file if [ -L "$f" ]; then printf '%s -> ' "$f" readlink -- "$f" else printf '%s\n' "$f" fi