Command-Line

如何使用 find 命令獲取類似輸出的 ls

  • January 28, 2022

我正在嘗試ls從 find 命令獲得類似的輸出(這是在 Linux Mind 上使用find (GNU findutils) 4.7.0.

這是因為我想查看數字 chmod 權限

到目前為止,我管理的是:

% find . -maxdepth 1 -printf "%m %M %y %g %G %u %U %f %l\n"
755 drwxr-xr-x d blueray 1000 blueray 1000 . 
664 -rw-rw-r-- f blueray 1000 blueray 1000 .zshrc 
644 -rw-r--r-- f blueray 1000 blueray 1000 .gtkrc-xfce 
644 -rw-r--r-- f blueray 1000 blueray 1000 .sudo_as_admin_successful 
777 lrwxrwxrwx l root 0 root 0 resolv.conf /run/systemd/resolve/resolv.conf

在這裡,%l如果文件不是符號連結,則列印空字元串。

我正在尋找的是,如果%l不為空,則 print -> %l

我該怎麼做-printf

您可以告訴find為連結列印一件事,為非連結列印另一件事。例如:

$ find  . -maxdepth 1 \( -not -type l -printf "%m %M %y %g %G %u %U %f\n" \) -or \( -type l -printf "%m %M %y %g %G %u %U %f -> %l\n" \) 
755 drwxr-xr-x d terdon 1000 terdon 1000 .
644 -rw-r--r-- f terdon 1000 terdon 1000 file1
755 drwxr-xr-x d terdon 1000 terdon 1000 dir
644 -rw-r--r-- f terdon 1000 terdon 1000 file
777 lrwxrwxrwx l terdon 1000 terdon 1000 linkToFile -> file

或者,更清晰一點:

find  . -maxdepth 1 \( -not -type l -printf "%m %M %y %g %G %u %U %f\n" \) \
               -or \( -type l -printf "%m %M %y %g %G %u %U %f -> %l\n" \) 

\( -not -type l -printf '' ... \)將對任何不是符號連結的東西執行,而將-or \( -type l -printf '' ...\)只對符號連結執行。

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