我对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'
我希望有一些好的帮助,谢谢你
答案 0 :(得分:8)
>=4
并启用**
(即globstar
); .txt
,该字符串必须锚定在文件名末尾(%
):#
anchors the pattern(普通单词或glob)开头,%
将其锚定到最后。.xml
这应该在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)
#!/bin/sh
cd $1
names_1=`ls`
for file in ${names_1}
do
mv ${file} ${file}.jpg
done