首页 > 解决方案 > 测试文件是否存在

问题描述

如果文件存在,我会对给出的示例感到困惑。我想检查是否存在多个文件以便执行进一步的操作。

ls -al:  
    -rwxrwxrwx 1 root   tomcat         6 Dec 16 11:25 documents_2019-12-12.tar.gz  

echo < [ -e ./documents_2019-12-12.tar.gz ]:  
    bash: [: No such file or directory  

有人可以告诉我我做错了什么吗?

编辑:我有一个包含两个文件的备份目录:

database_date.sql
documents_date.tar.gz

我需要检查给定日期的两个文件是否都可用。该目录应包含多个日期的这些文件对。

标签: linuxbash

解决方案


您在这里遇到的是对使用特定语法的位置的误解。您的[ -e ./documents_2019-12-12.tar.gz ]命令部分是特定if于 bash 子句的语法。这是一个例子

if [ -e ./documents_2019-12-12.tar.gz ]
    then 
        echo "File Exists!"
fi

方括号 [] 用于包围 if 语句正在执行的检查,并且-e标志特定于这些if检查。更多信息在这里http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_07_01.html

为了解释您看到的错误,<操作员将文件放在右侧,并将内容提供给左侧的命令。在您的情况下,<将其[视为右侧的内容,因此我们尝试将其作为文件读取。这样的文件不存在,因此 bash 有助于告诉您存在错误(bash: [: No such file or directory位),然后退出。


推荐阅读