2012-07-27 44 views
1

我正在尝试将*%3A *%3A * .xml等文件重命名为:*。xml。使用shell重命名文件不止一次

MODFILE=`echo $1 | tr -s '"%3A"' ':'` 
mv $1 "${MODFILE}" 

只要我没有%3A超过一次直接连续的工作,是否工作?我搜索了很多,发现有几个脚本只是重新命名,或者只有当我只发生一次时才重新命名。

例如,这仅适用于一个发生:

for files in *%3A*.xml 
do 
    mv "$files" "${files/%3A/:}" 
done 

是否有人可以帮助我?我不是说shellscripting舒适:/

+0

您的'tr'脚本不正确;它会用一个冒号代替''''或'%'或'3'或'A'的序列。 – tripleee 2012-07-27 11:47:29

回答

3

就快,如果你使用:

mv "$files" "${files//%3A/:}" 

(两个斜杠,而不是一个),然后所有出现将被替换。

+0

哇,这很容易哦,我没有得到它为什么人们都发布这样复杂的脚本xD?为什么是它与/ /但不/ /? – 2012-07-27 09:03:43

+0

Bash替换语法:http://tldp.org/LDP/abs/html/string-manipulation.html(请参阅子串替换) – beny23 2012-07-27 09:51:05

1

最简单的办法是使用重命名

rename %3A : * 

它可能只需要第一次出现,但你必须要再次执行。

重命名也可以接受正则表达式作为输入,但这取决于系统。

+0

是的,它只需要第一个,然后我有执行它10次,这不是很好... – 2012-07-27 09:17:06

+0

@DennisIch然后,你应该测试你的系统重命名接受正则表达式,然后重命名''s /%3A /:/ g'*'或类似的东西可能工作 – Bernhard 2012-07-27 10:51:29