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

3
我有一个包含许多子目录的目录,这些子目录名称前有一个 # 符号:
#adhasdk
#ad18237

我想将它们全部重命名并删除#字符。我尝试过:

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

但似乎没有起作用。

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

有关此事有什么想法吗?谢谢。
6个回答

7

只需使用

$ rename 's/^#//' *

使用-n只是为了检查您认为会发生的事情确实发生了。 在您的示例中,您已经注意到错误消息中使用了错误的引号(反引号)

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

bash试图执行名为s/#//g的命令。

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


3

我不知道你在这里打字时是否只是一个笔误,但是"rename"命令应该可以工作,如果:

  1. 你省略了"-n"并且
  2. 你用普通的单引号而不是反引号引用替换内容

"-n"告诉它不要真正执行任何操作。反引号是错误的(它们有意义,但不是你想要的)。


2
问题在于您使用了反引号(`),应该使用普通引号:
rename -n 's/#//g' *

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

0
我必须将给定文件夹中的所有文件夹重命名。每个文件夹名称都有圆括号内的一些文本。以下命令从所有文件夹名称中删除了圆括号:
重命名 's/(.+)//'*

0

有些发行版不支持在rename中使用正则表达式。您需要安装prename。更进一步,有时您无法安装prename,因此您需要安装gprename以获得二进制prename

如果您有'prename',只需将反引号字符“`”更改为单引号,一切都应该正常工作。

因此,解决方案应该是:

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

或者

prename -n 'y/#//' *

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接