我对bows脚本的Linux命令一无所知所以请帮助我。 我在不同的目录中有很多文件我想使用bash文件将所有这些文件从“name”重命名为“name.xml”是否可以这样做?我只是在互联网上找到有用的代码:
shopt -s globstar # enable ** globstar/recursivity
for i in **/*.txt; do
echo "$i" "${i/%.txt}.xml";
done
它甚至不起作用。
答案 0 :(得分:1)
为此目的派上了prename
实用程序,它默认安装在许多Linux发行版上,通常它与Perl包一起分发。您可以像这样使用它:
find . -iname '*.txt' -exec prename 's/.txt/.xml/' {} \;
或更快的替代方案:
find . -iname '*.txt' | xargs prename 's/.txt/.xml/'
答案 1 :(得分:0)
显示*/.txt */.xml
表示有效地存在与给定模式匹配的无文件,因为默认情况下,如果找不到匹配项,bash将使用逐字*
。
为防止出现此问题,您必须另外设置shopt -s nullglob
以使bash在根本没有匹配时返回任何内容。
验证回显的线条看起来有点合理后,你必须更换
echo "$i" "${i/%.txt}.xml"
与
mv "$i" "${i/%.txt}.xml"
重命名文件。
答案 2 :(得分:0)
您可以使用此bash脚本。
#!/bin/bash
DIRECTORY=/your/base/dir/here
for i in `find $DIRECTORY -type d -exec find {} -type f -name \*.txt\;`;
do mv $i $i.xml
done
答案 3 :(得分:0)
移动/重命名所有文件 - 无论扩展名在当前目录中以及从name
到name.xml
的下方。在运行真实脚本之前,您应该使用echo
进行测试。
shopt -s globstar # enable ** globstar/recursivity
for i in **; do # **/*.txt will look only for .txt files
[[ -d "$i" ]] && continue # skip directories
echo "$i" "$i.xml"; # replace 'echo' by 'mv' when validated
#echo "$i" "${i/%.txt}.xml"; # replace .txt by .xml
done