shell脚本,判断一个目录内是文件还是子目录

2024-11-29 21:25:49
推荐回答(2个)
回答(1):

你能不能一次把问题提完整呢。
shell 没有提供处理文件系统的底层功能。
可以使用重定向,在得到一行后就立刻匹配,完成后立刻退出。它不需要等到ls命令完成。可以操作目录下存在大量文件的情况。
效率最快的是这个:

ls /opt -1F --sort=none | ( read LINE;echo "$LINE"| if grep -q "/$" ; then exit 0 ;else exit 1 ; fi ;)

这个命令返回0 表示/opt 目录下存在目录(不代表全部都是目录,这条命令基于你在问题中的假设)。返回非0表示包含非目录文件。
-1 表示ls 输出一行个文件。
-F 表示输出的每个文件后缀一个符号表示文件类型,文件夹的后缀为 /
--sort=none 表示按照磁盘存储顺序进行输出,不进行排序。
|grep -q '/$' 表示 如果匹配到/ 结尾的行。

最近几天你提的问题相当零散。都不知道你的思维对不对。
shell 本身就不是高效率的语言。想要高效率应该使用其他脚本语言,例如perl 。

回答(2):

说下几种思路:
1) find . -type f
2) find ! -type d
3) ls -Rl | awk 'NF>2&&/^[^d]/'
这三种情况可作相同判断:如果结果为空,那就全是目录。

在上述命令后加 >/dev/null 2>&1,然后判断:
if [ $?-eq 0 ]; then
echo "All are files."
else
echo "All are directories."
fi