求助批量修改文件名的问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
allenny
帖子: 66
注册时间: 2007-10-14 1:09

求助批量修改文件名的问题

#1

帖子 allenny » 2013-08-21 11:57

想在命令行做批量修改文件名,执行以下语句:
for f in *; do mv $f `echo $f|tr ' ' '_'`; done


结果总是报类似以下的错误

mv: 目标"Flag_of_Zimbabwe.png" 不是目录

难道`echo $f|tr ' ' '_'`输出的是目录名?
头像
ceclinux
帖子: 308
注册时间: 2013-01-17 2:42
系统: Ubuntu 12.04LTS

Re: 求助批量修改文件名的问题

#2

帖子 ceclinux » 2013-08-21 12:55

bash的默认分割符号为空格,所以mv的时候会出现问题
脚本前面须加上

代码: 全选

export IFS=$'\n'
Ubuntu 12.04 LTS
laptop:Acer 4750G CPU:I5-2410
内存:2+2G 硬盘:500+750
http://www.ceclinux.org
allenny
帖子: 66
注册时间: 2007-10-14 1:09

Re: 求助批量修改文件名的问题

#3

帖子 allenny » 2013-08-21 14:00

果然是这样,谢谢~~ :em09
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 求助批量修改文件名的问题

#4

帖子 eexpress » 2013-08-21 16:39

gprename吧。
● 鸣学
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 求助批量修改文件名的问题

#5

帖子 lilydjwg » 2013-08-23 0:22

zsh 不会有这种问题。

这个需求,直接 perl-rename 's/ /_/g' * 。(命令名可能不同。)
aerofox
帖子: 1453
注册时间: 2008-05-24 8:30

Re: 求助批量修改文件名的问题

#6

帖子 aerofox » 2013-08-30 6:13

allenny 写了:想在命令行做批量修改文件名,执行以下语句:
for f in *; do mv $f `echo $f|tr ' ' '_'`; done


结果总是报类似以下的错误

mv: 目标"Flag_of_Zimbabwe.png" 不是目录

难道`echo $f|tr ' ' '_'`输出的是目录名?
给 $f 加上双引号就可以了,另外,如果是用 bash 或 zsh,可以不用 tr

代码: 全选

for f in *; do mv "$f" `"${f// /_}"; done
当然,用 prename 命令更方便。
回复