求助,批量重命名不规则文件夹下面的文件后缀。

2015-04-02 16:41:58 +08:00
 yanwen
文件夹的列表是这样的:

/2015.3.1/照片/惠州/P23017745.JPG
/2015.3.1/照片/惠州/P23017735.JPG
/2015.2.16/照片/23020018/P23017746.JPG
/2015.2.16/照片/2315150018/P23017746.JPG




想把后面的大写JPG 改为jpg

不知道用awk怎么写呢?

求帮忙。。谢谢大家。
2100 次点击
所在节点    问与答
15 条回复
Ansen
2015-04-02 16:59:36 +08:00
find /2015.3.1/照片/ -name "*.JPG" -exec rename .JPG .jpg {} \;
yanwen
2015-04-02 17:03:55 +08:00
@Ansen 有没有递归的?
9hills
2015-04-02 17:17:05 +08:00
@yanwen find 本身就是递归的
yanwen
2015-04-02 18:18:18 +08:00
@9hills
@Ansen 执行了之后提示:

find: rename: No such file or directory
find: rename: No such file or directory
find: rename: No such file or directory
find: rename: No such file or directory
find: rename: No such file or directory
find: rename: No such file or directory
find: rename: No such file or directory


是什么原因呢??子目录太深了??还是??
ooxxcc
2015-04-02 18:27:03 +08:00
不,你需要安装rename这个工具。。
vincentxue
2015-04-02 18:32:43 +08:00
for f in *.JPG; do mv -- "$f" "${f%.JPG}.jpg"; done;
vincentxue
2015-04-02 18:59:31 +08:00
不好意思 没看到你是有目录的,试试这样:

find ./images -depth -name "*.JPG" | sed "s/\.JPG$//" | xargs -I% mv %.JPG %.jpg
Ansen
2015-04-03 08:51:36 +08:00
@yanwen 检查一下 路径是否正确,相对||绝对 ,还有尽量不要用中文路径,
比如 /2015.3.1/images/
或者 :
find /2015.3.1/ -name "*.JPG" -exec rename .JPG .jpg {} \;
yanwen
2015-04-03 10:09:49 +08:00
@vincentxue 也会出现这样的错误。。 find: rename: No such file or directory
@Ansen 有中文路径。。悲剧的。。
vincentxue
2015-04-03 10:45:00 +08:00
@yanwen 你什么系统,我在 OS X 10.10.2 (14C109) 测试通过,包括路径含有中文、英文、中英混合,有多层目录。
vincentxue
2015-04-03 10:47:34 +08:00
@yanwen 你要把 ./images 更换为你的照片的上层路径

我是假设你的照片路径是这样的:

my/images/2015.3.1/照片/惠州/P23017745.JPG
my/images/2015.3.1/照片/惠州/P23017735.JPG
my/images/2015.2.16/照片/23020018/P23017746.JPG
my/images/2015.2.16/照片/2315150018/P23017746.JPG

那你要 cd 到 my 这个目录,然后运行命令。
vincentxue
2015-04-03 10:50:30 +08:00
虽然这命令不怎么可能会出错,但运行之前建议备份一下,系统差异什么的,文件夹下文件丢失我不负责,Linux 还没学好。。
yanwen
2015-04-03 10:51:03 +08:00
@vincentxue 我系统是10.9.5的。。不知道是不是系统有问题呢。。

y4nwen-MacBook-Pro:图片 y4nwen$ find ./2015.4.1/ -depth -name "*.JPG" | sed "s/\.JPG$//" | xargs -I% mv %.JPG %.jpg
mv: rename ./2015.4.1//431309换图/431309_010 ./2015.4.1//856 彩 明2015-4-1/432701/432701_000.JPG to ./2015.4.1//431309换图/431309_010 ./2015.4.1//856 彩 明2015-4-1/432701/432701_000.jpg: No such file or directory




是空格的问题么??
vincentxue
2015-04-03 11:52:35 +08:00
应该是空格的问题,你这个输出也太难看了。。
joyeblue
2015-04-03 15:33:58 +08:00
@yanwen 有空格就要将路径放到引号中。

find ./ -name "*.JPG" | sed -e 's/.JPG//g; s/\(\s\)/\\\1/g' | xargs -i% mv -v "%.JPG" "%".jpg

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/181154

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX