我正在尝试在shell脚本中使用if条件来检查工作目录中是否存在某些文件(以类似名称开头)。 我的问题是我有多个文件即。我工作目录中的“A1.txt”,“A2.txt”,“A3.txt”等。 现在我的问题是,有没有办法检查文件名字符串部分的文件。因此,如果脚本找到至少一个名称以“A”开头的文件,则会打印出找不到文件名的文件,文件名以“A”开头,因此不打印。 我的尝试如下:
if [ -f "A*.txt" ];
then
echo "Files exist."
else
echo "Files do not exist"
fi
但它不起作用并返回“太多参数”。有出路吗?
答案 0 :(得分:2)
在BASH中你可以使用:
( shopt -s nullglob; set -- A*.txt; (( $# > 0 )) ) &&
echo "Files exist." || echo "Files don't exist"
当找到匹配的文件时,它将以0
退出并打印:
Files exist.
当它找不到任何具有给定glob模式的匹配文件/目录时,它将以1
退出并打印:
Files don't exist
<强>解释强>
shopt -s nullglob
没有匹配的文件,glob
会导致shell无提示失败
set --
为位置参数$1,$2,$3
等分配给定参数。$#
是位置参数的数量。如果找到任何匹配的文件,它将被设置为大于零((...))
用于bash
(..)
为上述命令创建一个子shell,以便当前shell的env不受影响答案 1 :(得分:1)
这可能是一种方式:
#!/bin/bash
check=`ls A*.txt 2> /dev/null`
if [ ! -z "${check}" ];
then
echo "Files exist."
else
echo "Files do not exist"
fi
然后你可以使用正则表达式来证明check
变量,如果你需要只得到带有数字的文件,你可以做一些像check = ls A[1-9]*.txt
此致
克劳迪奥