在shell中判断一个文件是否为空

在shell中判断一个文件是否为空,第1张

首先:-f判断是不是文件; -d判断是不是目录;-e判断文件/目录是否存在;-s判断文件长度是否不为0,当-s后面跟目录是,总是返回真

在Linux中写脚本的时候,总免不了需要判断文件是否存在、文件内容是否为空等存在,而这些 *** 作都可以用 test  指令来实现,通过 man test 指令可以查看关于test指令的手册,手册中有如下说明:

在shell中通过test指令测试文件是否为空的示例脚本如下:

在shell中,test指令还有另外一种写法,上面的脚本和下面的脚本是等价的:

if [ -e filename ]then

...存在做...

else

...不存在做...

fi

其他选项:

与文件存在与否的判断

-e 是否存在

-f 是否为普通文件

-d 是否为目录

-s 是否为空的文件

-p 是否为管道文件

-b 是否为块设备文件

-c 是否为字符设备文件

-L 是否为软链接

-S 是否Socket文件

与文件权限有关的判断

-r 是否有可读的权限

-w 是否有可写的权限

-x 是否有可执行权限

-u 是否有特权位

-g 是否有组特权位

-k 是否有t位,即粘贴位

两个文件的比较判断

-nt 比较file1比file2新

-ot 比较file1比file2旧

-ef 比较file1和file2是否为同一个文件,

一般用于判断硬链接

整数之间的大小判断

-eq 相等

-ne 不等于

-gt 大于

-ge 大于等于

-lt 小于

-le 小于等于

字符串之间的判断

-z 是否为空字符串

-n 是否为非空字符串

str1 = str2 是否相等

str1 != str2 是否不等

多重条件判断

-a 两个条件同时满足,就为真,相当于and

-o 两个条件满足其一,就为真,相当于or

如果使用 [[ ]], 则多重判断可以使用:

[[ xxx &&xxx || xxx ]] 的形式.

search_dir=/tmp/test

include_subdir=1

if [ $include_subdir -eq 1 ] then

    n=$(find $search_dir -type f -exec sh -c 'printf "%s\n" "$1" kill "$PPID"' sh {} \ | grep -v "Terminated" | wc -l)

else

    n=$(find $search_dir -maxdepth 1 -type f -exec sh -c 'printf "%s\n" "$1" kill "$PPID"' sh {} \ | grep -v "Terminated" | wc -l)

fi

结果 n 为 0 表示指定目录下面没有文件,否则有文件。如果不需要检查指定目录下的子目录,把 include_subdir 置为 0 即可。find 命令中较复杂的那部分是为了实现找到第一个文件时就停止查找,避免检查有大量文件的目录时影响性能。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11960971.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存