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

任何帮助将不胜感激。

【问题讨论】:

    标签: regex linux rename


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 2016-08-22
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 1970-01-01
    相关资源
    最近更新 更多