从 Linux 中的文件名中删除空格 [关闭]

Posted

技术标签:

【中文标题】从 Linux 中的文件名中删除空格 [关闭]【英文标题】:Remove whitespaces from filenames in Linux [closed] 【发布时间】:2013-02-27 04:13: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" *

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

如果它真的是一个空格,以下将起作用。

$ rename "s/ //g" *

试试

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

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

【讨论】:

你怎么知道它是否真的是一个空格字符?对我来说,它看起来像一个空间。顺便说一句,$ rename "s/\s+//g" * 也不起作用。 @SamTimalsina 下划线替换对你有用,但空格不行?这似乎不太可能。 是的。它没有用。我从 Dropbox 下载了文件。我已经为此浪费了 2 个多小时。 谢谢你,我不知道没有 xargs 你可以做到这一点。 这里的重命名是什么?在我的发行版(ArchLinux)中,重命名 2.35.2(util-linux 包)。它没有这个选项,但rename [options] expression replacement file...,即。没有 's/ //g' 可用。【参考方案2】:

你可以这样做:

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

【讨论】:

这行得通!!!非常感谢!你能解释一下为什么 $ rename "s/ //g" * 不起作用吗? $ rename "s/ //g" * 对我来说没问题。也许你的环境有些奇怪。你在使用 bash 吗? 是的,我正在使用 bash。我的环境一定很奇怪。 我也在 zsh 中收到command not found: rename

以上是关于从 Linux 中的文件名中删除空格 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

无法删除 Windows 7 上带有尾随空格的文件夹 [关闭]

linux 如何删除文件中的空格和换行符号并保存到新文件中

如何删除除 Markdown 之外的所有文件中的尾随空格?

linux下脚本实现从一个文件中读数,有文件多行 (每行都是:名称 + 多个空格 + 数据 ),

如何从文件名中删除空格(批量)

从 zip 文件中读取的 XML 文件中删除空格