【问题标题】:Bash - Check if file exists when some of the filename is irrelevant [duplicate]Bash - 当某些文件名不相关时检查文件是否存在[重复]
【发布时间】:2019-03-06 11:58:00
【问题描述】:

我想检查文件是否存在,但只检查某些文件名是否存在

例如,在某个文件夹中,我有这些文件(日期格式:AAAAMMDD):

Rejets_20190112.csv.zip

Rejets_20190312.csv.zip

Rejets_20190314.csv.zip

我想检查该文件夹中是否存在以 Rejet_DAP_201903 开头的文件。换句话说,我想检查当前年份和月份的 Rejet_DAP 文件是否存在,日期无关紧要。

这是我尝试在脚本中执行的操作:

jour=`date +%d`
mois=`date +%m`
annee=`date +%Y`


    FILE="/appli/project/echanges/RTY/receptions/Rejet_${annee}${mois}"_*


    if [[ -e $FILE  ]]
    then
            echo "FILE EXISTS"
    else
            echo "FILE DOES NOT EXIST"

    fi

【问题讨论】:

  • 您尝试的通配符实际上与您要查找的文件不匹配。也许使用...${mois}??"_*

标签: bash


【解决方案1】:

你有你正在寻找的目录路径和文件模式。

ls 命令可用于根据模式列出文件。 所有命令在执行后都返回一个整数值。 0 表示执行成功。任何非零值都意味着错误。

如果没有文件匹配该模式,ls 将返回一个非零值。

您可以在if 语句中使用该返回码。

#!/bin/bash

jour=`date +%d`
mois=`date +%m`
annee=`date +%Y`
/appli/project/echanges

dir="/appli/project/echanges/RTY/receptions"
file_prefix="Rejet_DAP_"


if ls $dir/${file_prefix}${annee}${mois}* > /dev/null 2>&1
then
        echo "FILE EXISTS"
else
        echo "FILE DOES NOT EXIST"
fi

#!/bin/bash 行称为 shebang 行,我强烈建议在您的脚本中使用它。

> /dev/null 2>&1 是为了让您不会从 ls 命令获得输出,而只会显示您的输出。

【讨论】:

    【解决方案2】:

    您可以为此使用find

    $ if [[ `find /appli/project/echanges/RTY/receptions/ -type f |grep -i Rejet_DAP_${annee}${mois}|wc -l` -gt 0 ]] ; then 
     echo "FILE EXISTS"
    else
     echo "FILE DOES NOT EXIST"
    fi
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-26
      • 2012-04-18
      • 2019-02-10
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 2015-09-05
      相关资源
      最近更新 更多