您尚未登录。

#1 2019-01-04 09:37:28

驿窗
YCP
注册时间: 2016-06-03
帖子: 558

(已解决)rename 's/^/new-/' * 如何遍历子目录?

我用 rename 's/^/new-/' *.html 可以重命名当前目录下的html文件,但子目录下的文件无法改名~


我有一个目录,其中有大量子目录,子目录里各有很多html结尾的文件;我想把所有.html文件加前缀new-;比如原文件为001.html,重命名后为new-001.html;

我执行上面的命令,当前目录下文件可以重命名,但子目录下的文件没反应,怎样才能把所有子目录里的文件同时重命名?

最近编辑记录 驿窗 (2019-01-09 10:55:50)

在线

#2 2019-01-04 14:36:58

依云
a.k.a. 百合仙子
所在地: 一个等待妹纸出现的地方
注册时间: 2011-08-21
帖子: 4,957
个人网站

Re: (已解决)rename 's/^/new-/' * 如何遍历子目录?

rename 's/^/new-/' **/*.html

zsh 下可行,bash 大概需要借助 find + xargs 了。

离线

#3 2019-01-04 17:31:04

驿窗
YCP
注册时间: 2016-06-03
帖子: 558

Re: (已解决)rename 's/^/new-/' * 如何遍历子目录?

谢谢仙子~

我试着在bash里运行了一下,提示no such file or directory;看来必须要zsh了;

除了用rename,我这个批量改名,还有其它方法实现么?
zsh我暂时想先不折腾,如果没其它办法,我再试zsh~

最近编辑记录 驿窗 (2019-01-04 17:54:00)

在线

#4 2019-01-04 20:42:26

依云
a.k.a. 百合仙子
所在地: 一个等待妹纸出现的地方
注册时间: 2011-08-21
帖子: 4,957
个人网站

Re: (已解决)rename 's/^/new-/' * 如何遍历子目录?

你可以用 find 啊。find -name '*.html' -exec mv {} new-{} \; 大概这样子,用前先自行确认。

离线

#5 2019-01-04 22:30:56

驿窗
YCP
注册时间: 2016-06-03
帖子: 558

Re: (已解决)rename 's/^/new-/' * 如何遍历子目录?

我试试~

在线

#6 2019-01-04 23:27:33

nopriler
会员
注册时间: 2012-01-03
帖子: 392

Re: (已解决)rename 's/^/new-/' * 如何遍历子目录?

bash (4.0+) 可先先执行 shopt -s globstar

离线

#7 2019-01-05 08:49:03

驿窗
YCP
注册时间: 2016-06-03
帖子: 558

Re: (已解决)rename 's/^/new-/' * 如何遍历子目录?

我试了下 shopt命令运行后没有提示,再运行改名命令,会提示文件不存在;

文件现在要用,我先手动进入目录改名,等空闲了,我再继续研究~

在线

#8 2019-01-05 15:42:03

nopriler
会员
注册时间: 2012-01-03
帖子: 392

Re: (已解决)rename 's/^/new-/' * 如何遍历子目录?

报文件不存在是因为 rename 的行为不符合你我的预期。要达到你想要的效果得这么写:

rename 's/([^\/]*$)/new-$1/' **/*.html

离线

#9 2019-01-05 16:23:11

驿窗
YCP
注册时间: 2016-06-03
帖子: 558

Re: (已解决)rename 's/^/new-/' * 如何遍历子目录?

果然,你这两条命令运行完就能搞定目录及所有子目录内文件加前缀~

命令我存下来了;我正在研究原理...

最近编辑记录 驿窗 (2019-01-05 16:24:51)

在线

页脚