【发布时间】:2011-01-25 22:00:37
【问题描述】:
我有一个目录,里面有很多子目录,前面有一个#:
#adhasdk
#ad18237
我想重命名它们并删除 # 字符 我试着做:
rename -n `s/#//g` *
但似乎没有用。
-bash: s/#//g: No such file or directory
对此有任何想法。 谢谢
【问题讨论】:
标签: linux bash command-line
我有一个目录,里面有很多子目录,前面有一个#:
#adhasdk
#ad18237
我想重命名它们并删除 # 字符 我试着做:
rename -n `s/#//g` *
但似乎没有用。
-bash: s/#//g: No such file or directory
对此有任何想法。 谢谢
【问题讨论】:
标签: linux bash command-line
问题在于您使用了反引号 (`)。您应该使用普通引号:
rename -n 's/#//g' *
【讨论】:
我不知道您在此处输入时是否只是拼写错误,但如果出现以下情况,“重命名”命令应该可以工作:
“-n”告诉它不要真正做任何事情。反引号是错误的(它们的意思是什么,但不是你想要的)。
【讨论】:
for DIR in \#*/
do
echo mv "$DIR" "${DIR/#\#/}"
done
【讨论】:
随便用
$ rename 's/^#//' *
使用 -n 来检查您认为会发生的事情是否真的发生了。 在您的示例中,您可以了解错误消息中使用的错误引号(反引号)
-bash: s/#//g: No such file or directory
bash 正在尝试执行名为 s/#//g 的命令。
不,使用g(全局)并且不锚定正则表达式,您将替换任何#,而不仅仅是第一个位置的那个。
【讨论】:
我不得不重命名给定文件夹中的所有文件夹。每个文件夹名称在圆括号内都有一些文本。以下命令从所有文件夹名称中删除了圆括号:
重命名's/(.+)//' *
【讨论】:
一些发行版不支持rename 中的正则表达式。你必须安装prename。更重要的是,有时您无法安装prename,而您必须安装gprename 才能拥有二进制prename。
如果你有'prename',那么只需将反引号字符“`”更改为单引号,一切都会正常。
所以解决办法应该是:
prename -n 's/#//g' *
或
prename -n 'y/#//' *
【讨论】: