分页: 1 / 1

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

发表于 : 2013-08-21 11:57
allenny
想在命令行做批量修改文件名,执行以下语句:
for f in *; do mv $f `echo $f|tr ' ' '_'`; done


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

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

难道`echo $f|tr ' ' '_'`输出的是目录名?

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

发表于 : 2013-08-21 12:55
ceclinux
bash的默认分割符号为空格,所以mv的时候会出现问题
脚本前面须加上

代码: 全选

export IFS=$'\n'

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

发表于 : 2013-08-21 14:00
allenny
果然是这样,谢谢~~ :em09

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

发表于 : 2013-08-21 16:39
eexpress
gprename吧。

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

发表于 : 2013-08-23 0:22
lilydjwg
zsh 不会有这种问题。

这个需求,直接 perl-rename 's/ /_/g' * 。(命令名可能不同。)

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

发表于 : 2013-08-30 6:13
aerofox
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 命令更方便。