通配符 Linux 中的第一个匹配

通配符 Linux 中的第一个匹配

我的 bash 脚本中有以下部分:

for file in $(cat $csmtdirpath/$images_to_remove); do mv -v -f /$currentimages/*"$file"* $oldimages >> "$log_image_to_move" 2>> "$log_images_to_move_error"; done

此方法使用通配符,这会导致一些问题。

所以如果我有7AB.115.2在 $images_to_remove 文件中:

并且在其所在的目录中有:

  1. 7AB.115.2.1diudniwqndiqnwd
  2. 7AB.115.2.2ewfnweofnowenfwef
  3. 7AB.115.2.3fewklfkwemfkpwemfpkmw

它还会移动其他 3 个文件夹,因为 7AB.115.2 是基于以下情况的有效选项:“$文件”通配符。

我如何确保通配符仅使用找到的第一个匹配项并在之后停止?

谢谢。

干杯,

答案1

我如何确保通配符仅使用找到的第一个匹配项并在之后停止?

要仅移动找到的第一个文件,请替换:

mv -v -f /$currentimages/*"$file"* $oldimages

和:

for f in "/$currentimages/"*"$file"*
do
    mv -v -f "$f" "$oldimages"
    break
done

break导致循环在第一个文件后退出。

currentimages此外,我们在和shell 变量周围添加了引号,oldimages以防止单词分裂。

相关内容