Linux 用于重命名文件夹堆的Bash脚本

Linux 用于重命名文件夹堆的Bash脚本,linux,bash,shell,rename,strip,Linux,Bash,Shell,Rename,Strip,我有一个目录,看起来有点像这样: drw-r--r-- 1 root root 0 Jan 24 17:26 -=1=-directoryname drw-r--r-- 1 root root 0 Jan 24 17:26 -=2=-directoryname drw-r--r-- 1 root root 0 Jan 24 17:26 -=3=-directoryname drw-r--r-- 1 root root 0 Jan 24 17:26

我有一个目录,看起来有点像这样:

drw-r--r-- 1 root   root     0 Jan 24 17:26 -=1=-directoryname
drw-r--r-- 1 root   root     0 Jan 24 17:26 -=2=-directoryname
drw-r--r-- 1 root   root     0 Jan 24 17:26 -=3=-directoryname
drw-r--r-- 1 root   root     0 Jan 24 17:26 -=4=-directoryname
drw-r--r-- 1 root   root     0 Jan 24 17:26 -=5=-directoryname
我正在尝试编写一个脚本来更改这些文件夹
-=1=-文件夹#1
去掉“
-=1=-
”部分,可惜我运气不好

有人能帮我找到解决办法吗

到目前为止,我下面的脚本让我失望

#!/bin/bash
for i in {1..250}
do
        rename "-=$i=-" ""*
        i=i+1
done

我使用了1..250,因为有250个文件夹。

给定编号,您可以生成名称并使用
mv
命令:

#!/bin/bash
for i in {1..250}
do
    mv "-=$i=- Folder#$i" "Folder#$i"
done
使用基于Perl的
rename
命令(有时称为
prename
),您可以使用:

rename 's/-=\d+=- //' -=*=-*Folder#*
或者,给出修改后的问题(模式后的信息不是固定的):

这成功了!你能解释一下它是如何工作的吗?
\d+
的作用是什么

\d
是数字
0
的Perl正则表达式表示法。
9
+
修饰符表示“一个或多个”。因此,
s/-=\d+=-/
的正则表达式部分查找减号、等于、一个或多个数字、等于、减号和空格。替换零件将所有匹配的材质转换为空字符串。它被单引号包围,因此shell将其单独保留(虽然在替换命令中只有反斜杠是shell元字符,但是如果省略引号,反斜杠和空格将需要保护)



我不确定您将如何使用基于C的
重命名
命令来执行此任务;与基于Perl的版本相比,它的功能要小得多。

是基于Perl的重命名命令还是更简单的C程序?更新了问题,在去掉开头部分后,目录名没有用数字标识。我有珍珠版的重命名。现在你有一个不同的问题;目录名部分是否始终相同?您应该显示
-=1=-directoryname
-=2=-nameofdirectory
-=3=-directory
-=4=-name
或其他类似的差异,以使您处理的内容更清楚。如果您有Perl
重命名(Perl中没有“a”),那么可以修改我的答案;例如,您只需将glob更改为
-=*=-*
。如果没有空间,请从
s//
命令regex中删除空间。Etc.rename's/-=\d+=-/'-=*=-*这很有效!你能解释一下它是如何工作的吗?\d+的作用是什么?
rename 's/-=\d+=- //' -=*=-*