【问题标题】:linux batch rename directories and strip # character from namelinux批量重命名目录并从名称中删除#字符
【发布时间】:2011-01-25 22:00:37
【问题描述】:

我有一个目录,里面有很多子目录,前面有一个#:

#adhasdk
#ad18237

我想重命名它们并删除 # 字符 我试着做:

rename -n `s/#//g` *

但似乎没有用。

-bash: s/#//g: No such file or directory

对此有任何想法。 谢谢

【问题讨论】:

    标签: linux bash command-line


    【解决方案1】:

    问题在于您使用了反引号 (`)。您应该使用普通引号:

    rename -n 's/#//g' *
    

    【讨论】:

      【解决方案2】:

      我不知道您在此处输入时是否只是拼写错误,但如果出现以下情况,“重命名”命令应该可以工作:

      1. 你去掉“-n”并且
      2. 您使用常规单引号而不是反引号引用替换

      “-n”告诉它不要真正做任何事情。反引号是错误的(它们的意思是什么,但不是你想要的)。

      【讨论】:

        【解决方案3】:
        for DIR in \#*/
        do
             echo mv "$DIR" "${DIR/#\#/}"
        done
        

        【讨论】:

          【解决方案4】:

          随便用

          $ rename 's/^#//' *
          

          使用 -n 来检查您认为会发生的事情是否真的发生了。 在您的示例中,您可以了解错误消息中使用的错误引号(反引号)

           -bash: s/#//g: No such file or directory
          

          bash 正在尝试执行名为 s/#//g 的命令。

          不,使用g(全局)并且不锚定正则表达式,您将替换任何#,而不仅仅是第一个位置的那个。

          【讨论】:

            【解决方案5】:

            我不得不重命名给定文件夹中的所有文件夹。每个文件夹名称在圆括号内都有一些文本。以下命令从所有文件夹名称中删除了圆括号:

            重命名's/(.+)//' *

            【讨论】:

              【解决方案6】:

              一些发行版不支持rename 中的正则表达式。你必须安装prename。更重要的是,有时您无法安装prename,而您必须安装gprename 才能拥有二进制prename

              如果你有'prename',那么只需将反引号字符“`”更改为单引号,一切都会正常。

              所以解决办法应该是:

              prename -n 's/#//g' *
              

              prename -n 'y/#//' *
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-10-30
                • 1970-01-01
                • 2017-02-21
                • 2013-12-09
                • 1970-01-01
                • 1970-01-01
                • 2015-12-13
                • 2019-04-11
                相关资源
                最近更新 更多