如何在Unix/Linux中将文件夹中的所有文件添加.xml扩展名

11
我想要重命名文件夹中的所有文件并添加.xml扩展名。我正在使用Unix。我该怎么做?

1
这些标签会造成混淆。你想在PHP、Python还是Unix shell中完成这个任务? - rds
重命名所有文件为 .xml 格式:rename 's/$/.xml/' * 参考链接:http://askubuntu.com/a/74368 - Neil
4个回答

22

在shell中,您可以这样做:

for file in *; do
    if [ -f ${file} ]; then
        mv ${file} ${file}.xml
    fi
done

编辑

如果要对所有子目录进行递归操作,您应该使用find命令:

for file in $(find -type f); do
    mv ${file} ${file}.xml
done

另一方面,如果你要做的事情比这更复杂,那么你可能不应该使用 shell 脚本。

更好的方法是

使用下面由 Jonathan Leffler 提供的评论:

find . -type f -exec mv {} {}.xml ';'

如何递归地对所有子目录执行此操作? - aWebDeveloper
7
使用 find 命令查找文件;find . -type f -exec mv {} {}.xml ';' - Jonathan Leffler
如果它们已经有 .xml 扩展名,我不希望它们被重命名。 - aWebDeveloper
1
是的,请不要在评论中改变问题。请查看http://tldp.org/LDP/abs/html/string-manipulation.html,了解如何测试文件名是否以“.xml”结尾。 - Roshan Mathews

4

不知道这是否是标准的,但我的Perl包(Debian/Ubuntu)包括一个/usr/bin/prename(以及一个符号链接只有rename),它没有其他作用:

rename 's/$/.xml/' *

如何递归地在所有子目录中执行此操作,但不包括 .xml 文件。即不包括已重命名的文件。 - aWebDeveloper
使用$(find -type f)代替*,并通过断言s/(?<!\.xml)$/.xml/调整正则表达式。 - mario
2
你可以使用带有 -n 标志的 rename 命令来测试重命名文件的效果,而不会实际更改文件名。 - Mister Smith

3
find . -type f \! -name '*.xml' -print0 | xargs -0 rename 's/$/.xml/'

2
Python 中:
使用 os.listdir 查找目录中所有文件的名称。如果您需要 递归地 查找子目录中的所有文件,请改用 os.walk。它的API比 os.listdir 更复杂,但它提供了强大的递归遍历目录的方法。
然后使用 os.rename 来重命名这些文件。

@Web开发者:你刚才因为我给你提供了一个答案而踩了我吗?真的吗? - Eli Bendersky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接