我的 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 文件中:
并且在其所在的目录中有:
- 7AB.115.2.1diudniwqndiqnwd
- 7AB.115.2.2ewfnweofnowenfwef
- 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
以防止单词分裂。