将文件名与bash中的字符串进行比较

时间:2018-03-11 16:08:19

标签: bash

我正在创建一个备份功能来复制具有特定扩展名扩展名的所有文件。

files()在找不到文件结果时返回'*' '+' './',因此我尝试使用{{来避免无效的cp [* | + | ./] /backup 1}}但它仅适用于if

*

2 个答案:

答案 0 :(得分:2)

files=( "$sp" + *."$ext" )

看起来不对; +将成为arrey的第二个元素。你可能想要

files=( "$sp"/*."$ext" )

!= *可以省略对shopt -s nullglob的检查。

case语句可能比您的||链(应该是&&)更具可读性:

case $f in
  ./|\+|\*)  ;;
  *) cp "$f" "$bp/" ;;
esac

答案 1 :(得分:1)

您需要使用&&and)。

这是因为如果结果不是*+./,您只想打印文件。这意味着您要确保所有这三个条件都是False,并且执行此操作的方式是使用&&

目前,您的代码无效,因为它首先检查结果是否不等于*。如果此条件为True,则无需评估其他两个条件,因此bash将转到下一行代码(在您使用or时忽略其他条件)。