我需要测试目录中是否存在以“ant”开头的文件。如果存在,我需要删除该文件。我现在使用的命令是
test -e $FILE_PATH/$FILE_NAME
我已经定义了
FILE_NAME="ant"
在 FILE_NAME 之后添加 * 是行不通的。
答案1
如果仅存在一个此类文件,则可以使用一种可移植的方法来删除该文件:
set -- "${FILE_PATH}/${FILE_NAME}"*
[ $# -eq 1 -a -e "$1" ] && rm -- "$1"
在我看来,如果您不关心预先存在多少个“ant”文件,但希望在完成后它们(全部)消失,只需:
rm -f "${FILE_PATH}/${FILE_NAME}"*
- 这样,如果没有这样的文件, rm 将(强制安静)不执行任何操作,但如果有(任何 - 1 个或更多!)这样的文件,rm
将删除它们。
答案2
这是执行此操作的另一种方法:
-sh-4.1$ dir=$(pwd) ; filename="ant"
if (( $(shopt -s nullglob; set -- ${dir}/${filename}*; echo $#) > 0 )); then rm
${dir}/${filename}* ; fi
shopt -s nullglob
:如果目录为空,将确保返回注释。
set -- ${dir}/${filename}* :
设置位置参数。
$#
:返回位置参数的计数。作为执行rm的条件
作为一个线性:
1$ dir=$(pwd) ; filename="ant" ; if (( $(shopt -s nullglob; set -- ${dir}/${filename}*; echo $#) > 0 )); then rm ${dir}/${filename}* ; fi