我有 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、套接字、门、设备...)将被忽略。.
和目录条目..
也将被忽略。