![使用通配符/正则表达式选择不存在的文件](https://linux22.com/image/103995/%E4%BD%BF%E7%94%A8%E9%80%9A%E9%85%8D%E7%AC%A6%2F%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E9%80%89%E6%8B%A9%E4%B8%8D%E5%AD%98%E5%9C%A8%E7%9A%84%E6%96%87%E4%BB%B6.png)
我正在尝试将数百个*.jpg
文件转换为*.webp
以下文件libwebp
在 macOS 上。特别是,我想使用命令行工具cwebp
来执行转换。它的工作原理如下:
cwebp <input_file>.jpg -o <output_file>.webp
我的*.jpg
文件,其名称IMG_20160227_110640.jpg
大约是,存储在名为 的目录下root
。问题是*.webp
执行转换时文件不存在,所以我不知道如何将它们的名称传递给cwebp
.例如,如果我只有一张图片要转换,我会简单地执行
cwebp IMG_20160227_110640.jpg -o IMG_20160227_110640.webp
然而,有数百行,我不想输入数百行命令。如何使用正则表达式/编写脚本来自动转换?
答案1
使用for
循环与参数扩展相结合:
for f in *.jpg; do cwebp "$f" -o "${f%.jpg}.webp"; done
另请参阅LESS='+/Parameter Expansion' man bash
阅读有关 Bash 的内容。
然而,参数扩展在 POSIX 中指定;它不是 Bash 特有的。 (不过,Bash 可能有一些扩展。)上面的命令适用于任何 POSIX 系统。