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

时间:2013-04-05 08:55:49

标签: bash batch-rename

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

for file in *.txt
do
mv ${file} ${file/.txt}/.xml
done 

for file in *.*
do
mv ${file} ${file/.*}/.xml
done

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

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

5 个答案:

答案 0 :(得分:8)

解释

  1. 对于递归,您需要使用Bash >=4并启用**(即globstar);
  2. 首先,我使用parameter expansion删除字符串.txt,该字符串必须锚定在文件名末尾(%):
  3. # anchors the pattern(普通单词或glob)开头,
  4. %将其锚定到最后。
  5. 然后我追加新的.xml
  6. 对文件名要格外小心,你应该 always quote parameters expansion
  7. 代码

    这应该在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
    

答案 1 :(得分:2)

如果是一个或两个子目录,可以使用rename命令:

rename .txt .xml *.txt

这将重命名执行命令的目录中的所有.txt到.xml文件。

答案 2 :(得分:1)

如果所有文件都在同一目录中,则可以使用单个命令完成。例如,您要将所有jpg文件转换为png,转到相关目录位置,然后使用命令

重命名.jpg .png *

答案 3 :(得分:1)

我想重命名" file.txt" to" file.jpg.txt",使用rename easy peezy:

重命名' s / .txt $ /。jpg.txt /' * .TXT

man rename会告诉你需要知道的一切。

爱上Linux,有一个适合一切的工具: - )

答案 4 :(得分:-1)

传递dir路径的命令行参数

#!/bin/sh
cd $1
names_1=`ls`
for file in ${names_1}
do
mv ${file} ${file}.jpg
done