想在命令行做批量修改文件名,执行以下语句:
for f in *; do mv $f `echo $f|tr ' ' '_'`; done
结果总是报类似以下的错误
mv: 目标"Flag_of_Zimbabwe.png" 不是目录
难道`echo $f|tr ' ' '_'`输出的是目录名?
求助批量修改文件名的问题
-
- 帖子: 66
- 注册时间: 2007-10-14 1:09
- ceclinux
- 帖子: 308
- 注册时间: 2013-01-17 2:42
- 系统: Ubuntu 12.04LTS
Re: 求助批量修改文件名的问题
bash的默认分割符号为空格,所以mv的时候会出现问题
脚本前面须加上
脚本前面须加上
代码: 全选
export IFS=$'\n'
-
- 帖子: 66
- 注册时间: 2007-10-14 1:09
Re: 求助批量修改文件名的问题
果然是这样,谢谢~~ 

- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
- lilydjwg
- 论坛版主
- 帖子: 4258
- 注册时间: 2009-04-11 23:46
- 系统: Arch Linux
- 联系:
Re: 求助批量修改文件名的问题
zsh 不会有这种问题。
这个需求,直接 perl-rename 's/ /_/g' * 。(命令名可能不同。)
这个需求,直接 perl-rename 's/ /_/g' * 。(命令名可能不同。)
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 求助批量修改文件名的问题
给 $f 加上双引号就可以了,另外,如果是用 bash 或 zsh,可以不用 trallenny 写了:想在命令行做批量修改文件名,执行以下语句:
for f in *; do mv $f `echo $f|tr ' ' '_'`; done
结果总是报类似以下的错误
mv: 目标"Flag_of_Zimbabwe.png" 不是目录
难道`echo $f|tr ' ' '_'`输出的是目录名?
代码: 全选
for f in *; do mv "$f" `"${f// /_}"; done