在Linux中删除文件名中的空格

27

我有成百上千个jpg文件,它们在不同的文件夹中,如下所示:

  • 304775 105_01.jpg
  • 304775 105_03.jpg
  • 304775 105_05.jpg
  • 304775 105_07.jpg
  • 304775 105_02.jpg
  • 304775 105_04.jpg
  • 304775 105_06.jpg

基本上,我需要删除文件名中的空格。我已经知道了将空格更改为下划线的命令:

$ rename "s/ /_/g" *

但在这种情况下,我不需要下划线,只需要删除空格。我尝试了以下方法,但没有起作用:

$ rename "s/ //g" *

非常感谢您的帮助。

2个回答

42
以下情况适用于空格的情况。
$ rename "s/ //g" *

尝试

$ rename "s/\s+//g" *

\s 是一个空白字符,属于 [ \t\r\n] 集合。


1
你怎么知道它真的是一个空格字符?对我来说看起来像一个空格。顺便说一下,$ rename "s/\s+//g" * 也不起作用。 - Sam Timalsina
1
@SamTimalsina 下划线替换对你起作用了,但空格不行?这似乎非常不可能。 - Anirudh Ramanathan
是的,它没用。我从Dropbox下载了文件。我已经在这上面浪费了2个多小时。 - Sam Timalsina
1
谢谢,我不知道你可以在没有xargs的情况下做到这一点。 - leo
<expression>不支持正则表达式吗? - Anirudh Ramanathan
显示剩余2条评论

25

你可以这样做:

IFS="\n"
for file in *.jpg;
do
    mv "$file" "${file//[[:space:]]}"
done

这个可以用!!! 非常感谢!你能解释一下为什么 $ rename "s/ //g" * 没有起作用吗? - Sam Timalsina
$ rename "s/ //g" * 对我来说运行良好。也许你的环境有些奇怪。你在使用bash吗? - Blake
是的,我正在使用Bash。我的环境可能有些奇怪。 - Sam Timalsina
我在zsh中收到了“command not found: rename”的错误提示。 - Mike Lyons

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接