如何使用 find 命令获取类似 ls 的输出

如何使用 find 命令获取类似 ls 的输出

我正在尝试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 '' ...\)仅针对符号链接运行。

相关内容