列出当前目录中的文件、目录和可执行文件

列出当前目录中的文件、目录和可执行文件

我有 php shell,并且有一个函数可以做到这一点(但是当我调用scandir($path)函数时,由于 php 的限制,它给了我错误),所以我需要使用我的 bash shell 来做同样的事情。

它可以是一个命令,列出由一些分隔符分隔的所有 3 件事,也可以是 3 个命令。

最好的方法是什么?我唯一能想到的就是使用一些选项find执行 3 次。-maxdepth 1

答案1

使用 GNU find,您可以调用:

find /some/dir -mindepth 1 -maxdepth 1 -type f \
  \( -executable -printf 'X%p\0' -o -printf 'F%p\0' \) -o \
  -type d -printf 'D%p\0'

输出将是一个以 NUL 分隔(NUL 是唯一可能不会出现在文件路径中的字符)的记录列表,其中的第一个字母标识类型X, F,D用于可执行常规文件、其他常规文件、目录)。

对于符号链接,如果您想考虑符号链接目标的类型,请使用-xtype而不是-type上面的。-executable返回可由运行该 find 命令的进程执行的文件。其他类型的文件(fifo、套接字、门、设备...)将被忽略。.和目录条目..也将被忽略。

相关内容