【问题标题】:for loop for multiple extension and do something with each filefor循环多个扩展名并对每个文件做一些事情
【发布时间】:2012-08-28 20:49:56
【问题描述】:

我正在尝试在 bash 中编写一个 for 循环来获取扩展名为 jpg、jpeg、png 的文件,这是我的尝试,但不起作用

for file in "${arg}"/*.{jpg,jpeg,png}; do echo ${arg}-something.jpg > z.txt ; done;

基本上,我想在当前文件夹中获取具有这些扩展名的文件的名称,并对每个文件执行一些操作,然后使用新的扩展名输出文件名。

【问题讨论】:

标签: bash


【解决方案1】:

您没有在任何地方使用$file。试试

for file in "$arg"/*.{jpg,jpeg,png} ; do
    echo "$file" > z.txt
done

【讨论】:

    【解决方案2】:

    我想对提议的解决方案提出 2 项改进建议:

    A. "$arg"/.{jpg,jpeg,png} 中的 for 文件也将产生 "$arg"/.jpeg 如果没有带有 jpeg 扩展名的文件并且会产生脚本错误:

    $ echo *.{jpg,jpeg,png}
    myPhoto.jpg *.jpeg *.png
    

    为避免这种情况,在 for 循环之前,设置 nullglob 以从列表中删除 null glob:

    $ shopt -s nullglob # Sets nullglob
    $ echo *.{jpg,jpeg,png}
    myPhoto.jpg
    $ shopt -u nullglob # Unsets nullglob
    

    B.如果您还想搜索 *.png 或 *.PNG 或 *.PnG(即忽略大小写),则需要设置 nocaseglob:

    $ shopt -s nullglob # Sets nullglob
    $ shopt -s nocaseglob # Sets nocaseglob
    $ echo *.{jpg,jpeg,png}
    myPhoto.jpg myPhoto.PnG
    $ shopt -u nocaseglob # Unsets nocaseglob
    $ shopt -u nullglob # Unsets nullglob
    

    【讨论】:

    • 不错的建议。谢谢!
    猜你喜欢
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多