微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

批量重命名文件

我想批量重命名目录中的一些文件,以便从文件名中去除前面的数字和henn。

Old file name: 2904495-XXX_01_xxxx_20130730235001_00000000.NEW New file name: XXX_01_xxxx_20130730235001_00000000.NEW

我怎样才能做到这一点与Linux命令?

通过命令行将目录树复制到单个目录

重命名文件模式窗口批处理

用cmd删除文件名前缀

按顺序recursion重命名所有子文件夹中的文件

通过Windows批量重命名具有不同扩展名的文件

这应该使它:

rename 's/^[0-9]*-//;' *

它从头开始块[0-9] (即数字)多次,然后连字符-并从文件删除它。

如果rename不在你的机器上,你可以使用循环和mv :

mv "$f" "${f#[0-9]*-}"

测试

$ ls 23-aa hello aaa23-aa $ rename 's/^[0-9]*-//;' * $ ls aa hello aaa23-aa

要么:

$ ls 23-a aa23-a hello $ for f in *; > do > mv "$f" "${f#[0-9]*-}" > done $ ls a aa23-a hello

我觉得这个命令会更好,如果你执行下面的命令:

ls * | sed -e 'p;s/old-name/new-name/' | xargs -n2 mv

这里

ls * – 在curent文件夹中列出文件

sed -e – 执行表达式

磷; – 打印旧的文件名称

s / old-name / new-name /生成新的文件

xargs -n2 – 处理mv的两个参数

MV获取两个参数,并执行移动操作

建议:在执行mv之前,验证你所做的是你想用echo实现的。

ls * | sed -e 'p;s/old-name/new-name/' | xargs -n2 echo

以下示例重命名

SCCF099_FG.gz5329223404623884757.tmp

SCCF099_FG.gz

ls *tmp | sed -e 'p;s/([0-9])+.tmp/ /g' | xargs -n2 echo ls *tmp | sed -e 'p;s/([0-9])+.tmp/ /g' | xargs -n2 mv

如果第一个数字总是相同的长度:

for F in *new ; do mv $F ${F:8} done

${parameter:number}进行子字符串扩展 – 从第8个字符开始。

在扩展中还有许多其他字符串编辑可用于处理其他情况。

使用重命名 (Windows,Mac和Linux友好):

$ renamer --regex --find 'd+-(.*)' --replace '$1' *

这将从当前目录中的所有文件的开始剥离所有数字和第一个连字符。

vimv让你使用Vim的文本编辑功能重命名多个文件

进入vimv打开一个列出所有文件的Vim窗口,你可以进行模式匹配,视觉选择等来编辑名称。 在你退出Vim后,文件将被重命名

自述文件中的屏幕截图显示了它如何解决原始海报的问题。

[免责声明:我是该工具的作者]

这可能看起来有点复杂,但是它非常有效,在* nix和OSX系统上都能很好地工作。 它也以递归方式进行操作,重命名当前目录中的文件以及任何子目录:

find . -regex '.*/[0-9]{7}[-].*' -print > temp1 && cp temp1 temp2 && vi -c ":g/([0-9]{7}[-])(.*)/s//2/" -c ":x" temp2 && paste temp1 temp2 > temp3 && vi -c ":g/^/s//mv /" -c ":x" temp3 && sh ./temp3 && rm temp1 temp2 temp3

以下是刚刚发生的事情:

第一行说找到( find )所有文件,从当前目录( . )中的文件开始,其名称与“7个数字的后面跟一个破折号,后跟0个或更多个字符”的模式( -regex ) '.*/[0-9]{7}[-].*' ),并将这些文件名和它们各自的路径( -print )写入名为temp1 ( > temp1 )的文件。 请注意,在大多数情况下, -print指令可能不是必需的,但它不应该伤害任何东西。

find . -regex '.*/[0-9]{7}[-].*' -print > temp1 &&

然后,将temp1的内容复制( cp )到一个名为temp2的文件中。

cp temp1 temp2 &&

接下来,使用vi文本编辑器打开文件temp2并给vi两个命令(使用-c来表示每个新命令):

命令#1:

在temp2 ( :g )的每一行中搜索上面搜索的相同模式,除了这个时候使用圆括号( ([0-9]{7}[-])(.*) )。

对于每个匹配行,将光标移动到找到匹配的位置,并将整个匹配替换为匹配模式( 2 )的第二个组。

命令#2:

保存对temp2所做的更改并关闭文件( :x )。

其结果是:

vi -c ":g/([0-9]{7}[-])(.*)/s//2/" -c ":x" temp2 &&

现在,将temp1与temp2 ( paste )的行连接起来, paste每个新组合的行写入一个名为temp3 ( > temp3 )的文件中。

paste temp1 temp2 > temp3 &&

接下来,再次运行vi ,执行与上面相同的步骤,除了这次搜索文件temp3内的每行( ^ )的开始并且在其之后( mv )之后添加mv一个空格。

vi -c ":g/^/s//mv /" -c ":x" temp3 &&

然后,将temp3 ( ./temp3 )的内容作为shell脚本( sh )执行。

sh ./temp3 &&

最后,删除( rm )在整个过程中创建的每个临时文件

rm temp1 temp2 temp3

你可以使用这个工具: rnm

代码做你想做的事情:

rnm /path/to/the/directory -fo -dp -1 -rs '/^d+-//' -ss '^d+-'

-fo仅用于文件模式

-dp是目录的深度( -1表示无限深度)。

-rs是替换字符串。 d+-正则表达式被空字符串替换。

-ss是搜索字符串,它使用^d+- regex搜索文件。 (虽然可以省略,但一些无害的错误消息将被打印在屏幕上)。

我真的很喜欢“重命名* .mp3 * .mp4”。

但没有其他答案给我这个。 所以我写了一个haskell程序来做到这一点。

https://hackage.haskell.org/package/batch-rename

有了这个你可以这样做:batch_rename“DCIM * .jpg”“* .png”

还有一个方便的GUI工具pyRenamer https://wiki.ubuntuusers.de/pyRenamer/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐