在一个目录中,我有一些*.html文件。我想把它们都重命名为*.txt
我该怎么做呢?我使用bash shell。
在一个目录中,我有一些*.html文件。我想把它们都重命名为*.txt
我该怎么做呢?我使用bash shell。
当前回答
这里有一个解决方案,使用AWK。确保文件存在于工作目录中。否则,cd到html文件所在的目录,然后执行以下命令:
for i in $(ls | grep .html); do j=$(echo $i | grep -oh "^\w*." | awk '{print $1"txt"}'); mv $i $j; done
其他回答
有关更好的解决方案(只有bash功能,而不是外部调用),请参阅其他答案之一。
下面的操作会做,但不需要系统有重命名程序(尽管你经常在系统上有这个程序):
for file in *.html; do
mv "$file" "$(basename "$file" .html).txt"
done
编辑:正如评论中指出的那样,这对于没有适当引用的空格的文件名(现在添加到上面)不起作用。当你只在你自己的文件中工作时,你知道文件名中没有空格,这是可以工作的,但是当你写一些可能在以后被重用的东西时,不要跳过适当的引用。
如果使用bash,则不需要使用sed、basename、rename、expr等外部命令。
for file in *.html
do
mv "$file" "${file%.html}.txt"
done
不幸的是,可移植并不是一件简单的事情。你可能需要一点魔法。
for file in *.html; do echo mv -- "$file" "$(expr "$file" : '\(.*\)\.html').txt"; done
一旦你满意了,就把回声移开,它会按你想的做。
Edit: basename对于这种特殊情况可能可读性更好一些,尽管expr通常更灵活。
很好很简单!
find . -iname *.html -exec mv {} "$(basename {} .html).text" \;
你想要使用rename:
rename -S <old_extension> <new_extension> <files>
rename -S .html .txt *.html
这正是你想要的-它将所有匹配*.html的文件的扩展名从.html更改为.txt。
注意:Greg Hewgill正确地指出这不是bash内置的;是一个单独的Linux命令。如果你只是需要Linux上的一些东西,这应该可以工作;如果你需要一些更跨平台的东西,那就看看其他的答案。