以下を使用して、リンクが指す宛先ファイルを表示できます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
ベストアンサー1
ls
残念ながら、ファイルプロパティを検索して任意の方法で表示するオプションはありません。一部のシステムにはそのための別々のコマンドがあります(たとえば、GNUstat
には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