shell脚本,判断一个目录内是文件还是子目录
一个目录,例如/opt,目录内(即ls/opt列出的结果)要么全是目录,要么全是文件(regularfile)如何判断是哪种情况?当然,最土的方法就是用ls列出来,然后随...
一个目录,例如/opt,目录内(即ls /opt列出的结果)要么全是目录,要么全是文件(regular file)
如何判断是哪种情况?
当然,最土的方法就是用ls列出来,然后随便拿一个文件来判断。
但现在需要一个尽量高效快速的方法。不知道是否有? 展开
如何判断是哪种情况?
当然,最土的方法就是用ls列出来,然后随便拿一个文件来判断。
但现在需要一个尽量高效快速的方法。不知道是否有? 展开
2个回答
展开全部
你能不能一次把问题提完整呢。
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 。
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 。
更多追问追答
追问
ls /opt -1F --sort=none 这个命令确实如你所说。
可以后面命令貌似没捕获到结果啊,麻烦再看一下:
#!/bin/bash
result=`ls /opt -1F --sort=none | ( read LINE;echo "$LINE"| if grep -q "/$" ; then exit 0 ;else exit 1 ; fi ;)`
echo $result
运行之后输出空的(一个空行)。请帮忙看看是为什么
追答
这个命令是依靠返回值工作的,不是依靠输出的。
ls /opt -1F --sort=none | ( read LINE;echo "$LINE"| if grep -q "/$" ; then exit 0 ;else exit 1 ; fi ;)
if [ $? == 0] ;then
echo dir
else
echo other files
fi
展开全部
说下几种思路:
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询