![根据扩展名将文件名转换为小写的脚本](https://linux22.com/image/44097/%E6%A0%B9%E6%8D%AE%E6%89%A9%E5%B1%95%E5%90%8D%E5%B0%86%E6%96%87%E4%BB%B6%E5%90%8D%E8%BD%AC%E6%8D%A2%E4%B8%BA%E5%B0%8F%E5%86%99%E7%9A%84%E8%84%9A%E6%9C%AC.png)
根据扩展名将文件名转换为小写的脚本
答案1
要对多个扩展递归地执行此操作,您可以使用 zsh 的 zmv:
zsh -c '
autoload zmv
ext=(jpg mp3 ogg)
zmv -n "(**/)(*.(#i)(${(j:|:)ext}))" "\$1\${(L)2}"'
(高兴时删除-n
(或用 替换-v
))。
上面的(#i)
是打开不区分大小写的通配符,并且是用 来连接列表${(j:|:)ext}
的元素。也可以直接写:$ext
|
zsh -c '
autoload zmv
zmv -n "(**/)(*.(#i)(ogg|jpg|mp3))" "\$1\${(L)2}"'
答案2
我不确定你的问题如何链接到代码,所以我将重点关注这个问题。
在bash
版本 4 及更高版本中,您可以使用类似以下内容来执行此操作:
for file in ./*.JPG; do # Iterate over all items in the current directory that match *.JPG
mv "$file" "${file,,}" # Move the file found to a lowercase mapping (this is what the ,, parameter expansion method does)
done
显然替换*.JPG
为您想要的等效扩展名。