重命名文件名,另一名

问题描述:

非常简单的解释:重命名文件名,另一名

如何重命名

/folder1/something.test.html 
/folder1/somethingElse.test.html 
/folder2/againsomething.test.html 
/canBeHereAlso.test.html 

/folder1/something.test2.html 
/folder1/somethingElse.test2.html 
/folder2/againsomething.test2.html 
/canBeHereAlso.test2.html 

,也是反函数能够回来原来的点?

这样的事情是很简单的,但不幸的是,完全不可能对谷歌他们,除非你已经知道怎么做了......

我在想:

for NAME in */*.test.html; do mv $NAME $NAME2.html ; done # for A -> B 

for NAME in */*.test2.html ; do mv $NAME #remove last caracter.html for B --> A 

但不幸的是,这并不是那么简单...

对于简单的字符串后缀,前缀操作,我建议你熟悉shell的标准parameter expansion features${VAR%suffix_to_remove}${VAR#prefix_to_remove}。这些将工作在任何标准sh,不只是bash

测试 - >测试2

for NAME in */*.test.html; do  # NAME is, e.g., "dir/foo.test.html" 
    BASENAME=${NAME%.test.html}  # BASENAME is "dir/foo" 
    mv "$NAME" "$BASENAME.test2.html"; 
done 

测试2 - >测试是相似的:

... 
    BASENAME=${NAME%.test2.html}  # strip off .test2.html 
    ... 

您也可以使用标准shell实用程序basenamedirname可以实现类似的功能。

+0

非常美丽的答案完美的我想要的感谢。 –

您可以使用rename命令。

rename 's/(.*)\./$12./' *.html 

rename 's/.*\K\./2./' *.html 
+0

谢谢;)以及如何回到原始状态:/? –

+0

'rename's /.* \ K2 \ ././'* .html' –

+0

重命名命令是什么?我没有在所有类UNIX系统上使用它,并且我没有任何支持类似sed的正则表达式的重命名实用程序 – pilcrow

你可以这样做:

name1="/folder1/something.test.html" 
name2="${name1/%.html/2.html}" 
echo "$name2" 
#mv "$name1" "$name2" 

输出:

/folder1/something.test2.html 

.html正在与2.html在字符串的结尾所取代。

要返回即test2 -> test

name2="/folder1/something.test2.html" 
name1="${name2/%2.html/.html}" 

See the Bash Manual for more info on Parameter Expansion.

+0

谢谢;)以及如何回到原始状态:/? –

+0

@ValentinMontmirail'name1 =“$ {name2 /%2.html/.html}”'...一旦你明白发生了什么,这里来回应该是'.html'到'2.html'和'2.html'到'.html'的替换。 – Jahid