ソースファイルと宛先リンクファイルのみを表示するには、「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

ベストアンサー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

おすすめ記事