Blog icon indicating copy to clipboard operation
Blog copied to clipboard

MacOS中shell脚本判断目录下是否存在已知后缀名文件的命令

Open allenGKC opened this issue 7 years ago • 2 comments

背景

最近写项目的时候,需要将webpack打包后的静态文件压缩发送给后端传到服务器上,由于每次打包压缩比较机械,所以想到写个shell脚本来自动化。

问题

但是在写shell脚本时遇到一个问题:需要判断目录下是否存在.zip文件?

方法一(无效):

刚开始我查资料,使用了if [ -f *.zip ],用-f和通配符来判断是否有.zip的文件存在,然而运行结果一直报错“unexpected operator”,因此在-f下,后面是不能使用通配符的。

方法二(无效):

后来,我又想了一个办法,if [ -n “‘ls *.zip'” ],这句话的意思是,如果ls命令执行后有得到内容,则是真,其中-n表示后面的内容不是空值时为真。这句话是可以用,可以判断文件存在在目录下,但是,这是出现了个问题,如果目录下没有.zip的文件,就会报错“No such file or directory”,于是我放弃了这个方法。

方法三(管用!):

最后一个看了一个博客里方法,使用 if ls *.c >/dev/null 2>&1;then,这是一个重定向的方法,ls所有以.zip为后缀的文件,如果不存在,将标准错误重定向到标准输出,这里2>&1 的意思就是将标准错误也输出到标准输出当中。重定向中 0-标准输出,1-标准输出,2-标准错误,而No such file or directory是一个标准错误。

注意事项

值得注意的是:这个if后面没有中括号!并且2>&1的“>”是没有空格的!

allenGKC avatar Apr 20 '18 08:04 allenGKC

好用!

ststooyoudu avatar Jul 10 '21 10:07 ststooyoudu

很受用,感谢! 最后一段代码是不是复制错了?没写完 我补全一下 if ls *.c >/dev/null 2>&1;then echo "文件存在" fi ps:记得换行

WUTONK avatar Mar 26 '23 14:03 WUTONK