检查是否存在与目录同名的文件

时间:2014-05-19 06:43:42

标签: linux bash shell

我正在尝试创建一个脚本来确定每个子目录是否存在'.zip'文件。例如,我正在使用的目录可能如下所示:

/folder1
/folder2
/folder3
folder1.zip
folder3.zip

然后脚本会识别出“folder2”的'.zip'不存在,然后就此做点什么。

到目前为止,我已经提出了这个(下面)循环文件夹,但我现在卡住尝试将目录路径转换为包含文件名的变量。然后,我可以运行if来查看'.zip'文件是否存在。

#!/bin/sh

for i in $(ls -d */);
do
    filename= "$i" | rev | cut -c 2- | rev
    filename="$filename.zip"
done

2 个答案:

答案 0 :(得分:1)

# No need to use ls
for dir in */
do
  # ${var%pattern} removes trailing pattern from a variable
  file="${dir%/}.zip"
  if [ -e "$file" ]
  then
    echo "It exists"
  else
    echo "It's missing"
  fi
done

此处不需要捕获命令输出,但您的行应该是:

# For future reference only
filename=$(echo "$i" | rev | cut -c 2- | rev)

答案 1 :(得分:1)

您可以使用以下内容执行此操作:

#!/bin/sh

for name in $(ls -d */); do
    dirname=$(echo "${name}" | rev | cut -c 2- | rev)
    filename="${dirname}.zip"
    if [[ -f ${filename} ]] ; then
        echo ${dirname} has ${filename}
    else
        echo ${dirname} has no ${filename}
    fi
done

为您的测试用例输出:

folder1 has folder1.zip
folder2 has no folder2.zip
folder3 has folder3.zip

可以在不调用ls的情况下执行此操作,如果您经常这样做,这往往会变得很重要,但在这种情况下可能不是问题。

请注意,我还没有使用空间嵌入的文件名对此进行测试,可能需要对此进行一些额外的调整。