代码之家  ›  专栏  ›  技术社区  ›  Gabriel Solomon

Linux批量重命名目录并从名称中删除字符

  •  3
  • Gabriel Solomon  · 技术社区  · 14 年前

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

    #adhasdk
    #ad18237
    

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

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

    但似乎没用。

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

    有什么想法吗。 谢谢

    5 回复  |  直到 8 年前
        1
  •  6
  •   Diego Torres Milano    14 年前

    只使用

    $ rename 's/^#//' *
    

    用-n来检查你认为会发生的事情是否真的发生了。 在您的示例中,您有关于错误消息中使用的错误引号(反勾号)的线索

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

    bash正在尝试执行一个名为 s/#//g .

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

        2
  •  3
  •   Pointy    14 年前

    我不知道你在这里输入时是否只是一个输入错误,但是“rename”命令应该在以下情况下工作:

    1. 你把“-n”去掉,然后
    2. 你用普通的单引号而不是反引号来代替

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

        3
  •  2
  •   Johannes Weiss    14 年前

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

    rename -n 's/#//g' *
    
        4
  •  1
  •   ghostdog74    14 年前
    for DIR in \#*/
    do
         echo mv "$DIR" "${DIR/#\#/}"
    done
    
        5
  •  0
  •   Nadir Latif    8 年前

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

    重命名“s/(.+)//”*