我正在尝试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
不为空则打印-> %l
。
我怎样才能做到这一点-printf
?
答案1
您可以告诉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 '' ...\)
仅针对符号链接运行。