linux判断是不是文件且非空

linux判断是不是文件且非空,第1张

比如当前目录下有个文件名称为abc.txt

如果 要判断abc.txt是不是标准文件可以使用-f参数

if [ -f ./abc.txt ]then

echo "abc.txt is regular file"

fi

要判断是否为空,使用-s参数

if [ -s ./abc.txt ]then

echo "abc.txt is not empty!"

fi

简单的可以这样写

[ -f "./abc.txt" ] &&echo 'filename is file!' || [ -s "./abc.txt" ] &&echo 'filename is not empty!'

另外文件类型除了普通文件还有很多

-L 文件是一个符号链接

-b 文件是一个块设备

-c 文件是一个字符设备

-p 文件是一个管道

-S 文件是一个socket

-t 文件与一个终端相关联

如果是在脚本中可以写成:

if [[ $(ls 目录名) ]] then

  echo "有文件"  

else 

  echo "没有"

fi

如果是在命令行中,可写成一行:

if [[ $(ls 目录名) ]] then echo "有文件"  else echo "没有"fi

其中:

$(ls 目录名) 是目录里文件的列表

if [[ $(ls 目录名) ]] 表示如果目录内有文件为真,如果目录内没有文件则为假

如果是脚本可以通过ls -l命令来判断,因为目录第一个字母是d。

如果是编程可以参考以下内容。

man stat

stat.h中有判断是什么文件的宏:

S _ I S R E G ( ) 普通文件

S _ I S D I R ( ) 目录文件

S _ I S C H R ( ) 字符特殊文件

S _ I S B L K ( ) 块特殊文件

S _ I S F I F O ( ) 管道或F I F O

S _ I S L N K ( ) 符号连接( P O S I X . 1或S V R 4无此类型)

S _ I S S O C K ( ) 套接字(P O S I X . 1或S V R 4无此类型)

具体可以参照APUE文件目录相关章节。

下面给出一个具体的例子:

#include <stdio.h>

#include <sys/stat.h>

int main(int argc, char* argv[])

{

struct stat buf

if(argc <2)

{

printf("Need Parameter")

return -1

}

if(lstat(argv[1], &buf) <0)

{

printf("lstat error for %s\r\n", argv[1])

return

}

if(S_ISDIR(buf.st_mode))

printf("%s Is DIR\r\n", argv[1])

else if(S_ISREG(buf.st_mode))

printf("%s Is FILE\r\n", argv[1])

return 0

}


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

原文地址: http://outofmemory.cn/yw/7283704.html

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

发表评论

登录后才能评论

评论列表(0条)

保存