如何重命名的扩展名的批处理文件?(How do I rename the extension for

2019-06-18 00:27发布

在目录中,我有一堆*.html文件。

我想他们都重命名为*.txt

我用的是bash shell的。

Answer 1:

对于一个更好的解决方案(只bash的功能,而不是外部调用),看到其他的答案之一 。


下面会做,并且不要求系统具有rename程序(虽然你会经常有这样的系统上):

for file in *.html; do
    mv "$file" "$(basename "$file" .html).txt"
done

编辑:正如在评论中指出,这不适合带空格的文件名不正确的引用(现在上面添加)工作。 当你知道没有在文件名中的空间,这将工作,但每当你写的东西,可能在以后的时间被重用,不要跳过适当引用自己的文件纯属工作。



Answer 2:

如果使用bash,有没有必要像sed,基本名称,重命名,EXPR等外部命令

for file in *.html
do
  mv "$file" "${file%.html}.txt"
done


Answer 3:

rename 's/\.html$/\.txt/' *.html

不正是你想要的。



Answer 4:

这为我工作在OSX从.txt到.txt_bak

find . -name '*.txt' -exec sh -c 'mv "$0" "${0%.txt}.txt_bak"' {} \;


Answer 5:

你想用rename

rename -S .html .txt *.html

这不正是你想要的东西-这将延长从更改.html.txt匹配的所有文件*.html

注:格雷格Hewgill正确地指出,这不是一个bash内建; 是一个独立的Linux命令。 如果你只需要在Linux上的东西这应该做工精细; 如果你需要更多的东西跨平台再看看其他的答案之一。



Answer 6:

在Mac ...

  1. 安装重命名 ,如果你还没有: brew install rename
  2. rename -S .html .txt *.html


Answer 7:

对于Ubuntu的用户:

rename 's/\.html$/\.txt/' *.html


Answer 8:

下面是重命名的命令的例子:

rename -n ’s/\.htm$/\.html/’ *.htm

该-n意味着它是一个测试运行,并不会真正改变任何文件。 它会告诉你,如果你删除了-n,将被重命名的文件列表。 在上述情况下,将所有文件转换当前目录名从.htm为.html文件扩展名。

如果上面的测试运行的输出看起来不错,那么你可以运行的最终版本:

rename -v ’s/\.htm$/\.html/’ *.htm

该-v是可选的,但它是一个好主意,包括它,因为它是你将不得不通过重命名命令所做如下图所示的样本输出变化的唯一记录:

$ rename -v 's/\.htm$/\.html/' *.htm
3.htm renamed as 3.html
4.htm renamed as 4.html
5.htm renamed as 5.html

在中间的棘手的部分是一个Perl替代正则表达式,下面突出显示:

rename -v ’s/\.htm$/\.html/’ *.htm


Answer 9:

别人的网站抓取之后,我结束了成千上万的文件丢失.html扩展名的,跨越的子目录广泛的树。

要重命名他们都在一次拍摄,除了已经有一个.html扩展名(其中大多数是有没有),这为我工作的文件:

cd wwwroot
find . -xtype f \! -iname *.html   -exec mv -iv "{}"  "{}.html"  \;  # batch rename files to append .html suffix IF MISSING

在OP的情况下,我可能会修改轻微,仅重命名* .txt文件,就像这样:

find . -xtype f  -iname *.txt   -exec filename="{}"  mv -iv ${filename%.*}.{txt,html}  \; 

细分(hammertime!):

-iname * .TXT
- 手段只考虑文件中的.txt已经结束

MV -IV “{} {TXT,HTML}。” - {名%*}当发现一个传递{}作为文件名,$抽取出它的基本名称,没有任何扩展而形成的参数MV。 bash中取{TXT,HTML}重写它作为两个参数,因此最后的命令运行为: mv -iv "filename.txt" "filename.html"

修复需要,但:有空格的文件名处理



Answer 10:

这个问题明确提到猛砸,但如果你碰巧有ZSH可用它是非常简单的:

zmv '(*).*' '$1.txt'

如果你得到zsh: command not found: zmv然后只需运行:

autoload -U zmv

然后再次尝试。

由于这个原来的文章有关zmv尖端。



Answer 11:

这是最灵巧的解决方案,我发现,在OSX和Linux下正常工作,并与git的作品很好呢!

find . -name "*.js" -exec bash -c 'mv "$1" "${1%.js}".tsx' - '{}' \;

并使用Gi​​t:

find . -name "*.js" -exec bash -c 'git mv "$1" "${1%.js}".tsx' - '{}' \;



Answer 12:

该命令mmv似乎非常有效地完成此任务的文件(数以万计的第二个)一个巨大的数字。 例如,要重命名所有.xml文件.html文件,使用这样的:

mmv ";*.xml" "#1#2.html"

; 将匹配的路径中, *将匹配的文件名,并且这些被称为#1#2在更换名称。

基于答案exec或管道要么太慢或失败的一个非常大的数字文件。



Answer 13:

试试这个

rename .html .txt *.html 

用法:

rename [find] [replace_with] [criteria]


Answer 14:

有点迟到了。 你可以用xargs的做到这一点:

ls *.html | xargs -I {} sh -c 'mv $1 `basename $1 .html`.txt' - {}

或者,如果您所有的文件都在某个文件夹

ls folder/*.html | xargs -I {} sh -c 'mv $1 folder/`basename $1 .html`.txt' - {}


Answer 15:

如果你喜欢PERL,有一个短暂的PERL脚本(由Larry Wall,Perl的创造者orignally写的),会做正是你想要的位置: tips.webdesign10.com/files/rename.pl.txt 。 对于示例下面应该做的伎俩

rename.pl 's/html/txt/' *.html

=)

(感谢@loretoparisi的更新URL)



Answer 16:

遗憾的是它不平凡的可移植做。 你可能需要一点点的EXPR魔法。

for file in *.html; do echo mv -- "$file" "$(expr "$file" : '\(.*\)\.html').txt"; done

删除回声一旦你开心呢,你想要做什么。

编辑: basename可能是针对这种特殊情况下有点更具可读性,虽然expr是一般更灵活。



Answer 17:

这是一次修改多个扩展名的好方法:

for fname in *.{mp4,avi}
do
   mv -v "$fname" "${fname%.???}.mkv"
done

注意:要小心的扩展大小是相同的(在???)



Answer 18:

这里是我用来命名.edge文件.blade.php

for file in *.edge; do     mv "$file" "$(basename "$file" .edge).blade.php"; done

工程就像魅力。



Answer 19:

尼斯和简单!

find . -iname *.html  -exec mv {} "$(basename {} .html).text"  \;


文章来源: How do I rename the extension for a batch of files?