如何使用bash脚本更改多个文件的扩展名?

uni*_*mer 2 bash batch-rename

我对linux的使用非常新,也许这是我的第一次,所以我希望得到一些详细的帮助.我的服务器(Linux)上的多个目录中有超过500个文件我想使用bash脚本将其扩展名更改为.xml我使用了大量代码,但它们都没有使用我使用的一些代码:

for file in *.txt
do
mv ${file} ${file/.txt}/.xml
done 
Run Code Online (Sandbox Code Playgroud)

要么

for file in *.*
do
mv ${file} ${file/.*}/.xml
done
Run Code Online (Sandbox Code Playgroud)

我不知道即使第二个是有效的代码,我试图改变txt扩展名beacuse提示说没有这样的文件'.txt'

我希望有一些好的帮助,谢谢你

Édo*_*pez 8

说明

  1. 对于递归,你需要Bash >=4并启用**(即globstar);
  2. 首先,我使用参数扩展来删除字符串.txt,该字符串必须锚定在文件名(%)的末尾:
  3. # 模式(普通单词或glob)锚定到开头,
  4. 并将其%锚定到最后.
  5. 然后我追加新的扩展名 .xml
  6. 对文件名要格外小心,你应该总是引用参数扩展.

这应该在Bash(注意我只有echo旧的/新的文件名,实际上重命名文件,mv而不是使用echo):

shopt -s globstar # enable ** globstar/recursivity
for i in **/*.txt; do
    [[ -d "$i" ]] && continue; # skip directories
    echo "$i" "${i/%.txt}.xml";
done
Run Code Online (Sandbox Code Playgroud)