我正在尝试创建一个脚本来确定每个子目录是否存在'.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
答案 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
的情况下执行此操作,如果您经常这样做,这往往会变得很重要,但在这种情况下可能不是问题。
请注意,我还没有使用空间嵌入的文件名对此进行测试,可能需要对此进行一些额外的调整。