【问题标题】:Glob different file extension in bash script for loop在 bash 脚本中使用不同的文件扩展名进行循环
【发布时间】:2021-07-11 07:52:05
【问题描述】:

我无法在这里发现错误,为什么它不是 globbing 而是使用 ls *.{jpg,JPEG,JPG,jpeg,PNG,png} 运行完美?

如何解决?

for file in *.{jpg,JPEG,JPG,jpeg,PNG,png}
  do
echo $file
  #convert "${file}" -scale 50% gallery_"${file}".jpg
done

【问题讨论】:

  • 使用直接 glob 时出了什么问题?我看到的唯一问题是它会为任何不匹配的扩展名留下未扩展的 glob(例如,如果没有“.JPEG”文件,您将得到 *.JPEG 作为结果之一)。另一方面,ls 版本不起作用:它只运行一次循环,$file 中的所有文件名都带有换行符。
  • 您可以使用[ -s "$file" ] && convert "$file" ... 处理,只需测试文件是否存在并且大小不为零。 永远不要使用for i in $(ls anything),见Bash Pitfalls #1(这是第一个陷阱的原因......)
  • 是的,ls 绝对是个坏主意。我正在摆脱那个......

标签: bash glob


【解决方案1】:

启用nullglob 以避免未扩展的glob:

shopt -s nullglob

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 1970-01-01
    • 2021-06-17
    • 2013-01-17
    • 2018-12-04
    相关资源
    最近更新 更多