Ls

如何列出符號連結目標文件的屬性(尤其是日期)?

  • September 29, 2020

鍵入時ls -la,我們得到目前目錄中的文件列表,符號連結也列印了它們的目標文件。

顯示符號連結時,shell 會列印符號連結本身的屬性(尤其是日期)。

是否有列印目標屬性的選項?

-dLl向 ls添加選項。

-L告訴ls做顯示目標。-d告訴它不要進入目錄(只有當文件是目錄時才會有所不同)。-l說要做一個很長的清單(詳細)。

大多數係統呼叫和應用程序,當給定符號連結的路徑時,會在符號連結的目標上執行它們的操作。值得注意的例外是那些對目錄條目而不是文件(例如unlink()/ rmlink()/ symlink()/ )進行操作的例外ln

在獲取文件元數據資訊時,有兩個單獨的系統呼叫:(lstat()對符號連結本身進行stat()操作),(對符號連結的目標進行操作)。statx()對於Linux 上的較新版本,它帶有一個AT_SYMLINK_NOFOLLOW標誌。另請參閱listxattr()/ llistxattr(), getxattr()/lgetxattr()以了解擴展屬性。

當涉及到包裝這些的實用程序時,預設值取決於實用程序,如果有的話,更改操作模式的選項也取決於實現。

ls預設情況下,對作為參數給出的文件的目標進行操作,除非傳遞了任何-d, -l, -F, -g, -o,-n選項,在這種情況下,它對符號連結本身進行操作(使用lstat()而不是stat()statx()AT_SYMLINK_NOFOLLOW標誌一起使用)。

如果您想使用其中一個選項但仍想遵循符號連結,則可以傳遞該-H選項。

ls -ldH -- "$file"

符號連結解析後將報告有關文件的資訊。

ls還有一個-L選項告訴它解析所有符號連結,而不僅僅是作為參數給出的文件的符號連結。例如, ls -Ll /symlink-to-dir將解析/symlink-to-dir到它連結到的目錄,並列出其內容,並且對於其中的每個符號連結,還將列對外連結接目標處的資訊。它還影響如何使用-R.

對於其他工具:

Command               | default   | change with
----------------------+-----------+--------------
  IRIX stat          | target    | -L
   zsh stat          | target    | -L
   GNU stat          | symlink   | -L
   BSD stat          | symlink   | -L
busybox stat          | symlink   | -L
   AIX istat         | target    | none
   GNU date -r       | target    | none
   GNU find -printf  | symlink   | -follow/-L/-H
 Linux attr          | symlink   | -L
 Linux getfattr      | target    | -h
 Linux getfacl       | target    | -P

一些範例,具體為修改時間:

$ date -r link +%FT%T.%N%z # GNU date
2020-03-19T17:57:11.277584965+0000
$ zmodload zsh/stat
$ stat -F %FT%T.%N%z +mtime link
2020-03-19T17:57:11.277584965+0000
$ gstat -Lc %y link # GNU stat
2020-03-19 17:57:11.277584965 +0000
$ ls -lHd --full-time link # GNU ls
drwxr-xr-x 23 root root 29 2020-03-19 17:57:11.277584965 +0000 link/
$ find -H link -prune -printf '%TFT%TT%Tz\n' # GNU find
2020-03-19T17:57:11.2775849650+0000

引用自:https://unix.stackexchange.com/questions/612016