nal*_*zok 4 shell bash shell-script regular-expression arguments
我正在尝试将数百个*.jpg文件转换为macOS上的*.webp文件libwebp。特别是,我想使用命令行工具cwebp来执行转换。它是这样工作的:
cwebp <input_file>.jpg -o <output_file>.webp
Run Code Online (Sandbox Code Playgroud)
我的*.jpg文件,其名称是IMG_20160227_110640.jpg左右,存储在一个名为root. 问题是*.webp执行转换时文件不存在,所以我不知道如何将它们的名称传递给cwebp. 例如,如果我只有一张图片要转换,我会简单地执行
cwebp IMG_20160227_110640.jpg -o IMG_20160227_110640.webp
Run Code Online (Sandbox Code Playgroud)
但是,有数百个,我不想键入数百行命令。如何使用正则表达式/编写脚本来自动转换?
使用for循环结合参数扩展:
for f in *.jpg; do cwebp "$f" -o "${f%.jpg}.webp"; done
Run Code Online (Sandbox Code Playgroud)
另请参阅LESS='+/Parameter Expansion' man bash阅读有关 Bash 的内容。
但是,参数扩展是在 POSIX 中指定的;它不是 Bash 特有的。(不过,Bash 可能有一些扩展。)上面的命令适用于任何 POSIX 系统。