如何在shell脚本中修改文件名?

时间:2014-12-17 20:40:57

标签: shell

我有3个文本文件。我想使用for循环修改这些文件的文件名,如下所示。

请找到我有的文件

1234.xml

333.xml

cccc.xml

输出:

1234_R.xml

333_R.xml

cccc_R.xml

3 个答案:

答案 0 :(得分:1)

基本的unix命令mv同时适用于移动和重命名

mv 1234.xml 1234_R.xml

如果你想大量购买,请这样做:

[~/bash/rename]$ touch 1234.xml 333.xml cccc.xml
[~/bash/rename]$ ls
1234.xml  333.xml  cccc.xml
[~/bash/rename]$ L=`ls *.xml`
[~/bash/rename]$ for x in $L; do mv $x ${x%%.*}_R.xml; done
[~/bash/rename]$ ls
1234_R.xml  333_R.xml  cccc_R.xml
[~/bash/rename]$

答案 1 :(得分:1)

根据您的发行版,您可以使用rename

rename 's/(.*)(\.xml)/$1_R$2/' *.xml

答案 2 :(得分:0)

您可以使用 for 循环使用(bash)语法迭代单词列表(例如,使用ls返回的文件名列表):

for name [ [ in [ word ... ] ] ; ] do list ; done

然后使用mv source dest重命名每个文件。

这里的一个好方法是使用basename,它从文件名中删除目录和后缀(例如basename 333.xml将只返回333)。

如果将所有这些放在一起,以下内容应该有效:

for f in `ls *.xml`; do mv $f `basename $f`_R.xml; done