linux批处理重命名目录并从名称中删除#colracter

时间:2010-03-10 13:53:26

标签: linux bash command-line

我有一个包含很多子目录的目录,其中包含#infront:

#adhasdk
#ad18237

我想将它们全部重命名并删除#caracter 我试着这样做:

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

但似乎没有用。

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

对此有任何想法。 感谢

5 个答案:

答案 0 :(得分:7)

只需使用

$ rename 's/^#//' *

使用-n只是为了检查你认为它会发生什么。 在您的示例中,您可以了解错误消息中使用的错误引号(反引号)

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

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

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

答案 1 :(得分:3)

我不知道你在这里输入它是否只是一个拼写错误,但是“rename”命令应该起作用:

  1. 你放弃了“-n”和
  2. 您使用常规单引号引用替换,而不引用后引号
  3. “-n”告诉它不要做任何事情。背引号是错误的(它们意味着什么但不是你想要的东西)。

答案 2 :(得分:2)

问题是你使用反引号(`)。你应该使用正常的引号:

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

答案 3 :(得分:1)

for DIR in \#*/
do
     echo mv "$DIR" "${DIR/#\#/}"
done

答案 4 :(得分:0)

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

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