Skip to content

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

@allenGKC

Description

@allenGKC

背景

最近写项目的时候,需要将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的“>”是没有空格的!

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions