Bash 重命名一堆文件夹的脚本

Bash script to rename a heap of folders

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

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=- Folder#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-based rename 命令(有时称为 prename),您可以使用:

rename 's/-=\d+=- //' -=*=-*Folder#*

或者,给定修改后的问题(pattern后的信息不固定):

rename 's/-=\d+=- //' -=*=-*

This worked! Can you please explain how it worked? What's the \d+ for?

\d 是数字 0..9 的 Perl 正则表达式表示法。 +修饰符表示'one or more'。因此,s/-=\d+=- // 的正则表达式部分查找减号、等于号、一位或多位数字、等于号、减号和 space。替换部分将所有匹配的 material 转换为空字符串。它全部被单引号括起来,所以 shell 不理会它(尽管在该替换命令中只有反斜杠是 shell 元字符,但是如果您省略反斜杠和 space 则需要保护引号)。


我不确定您将如何使用 C-based rename 命令来完成这项工作;它比 Perl-based 版本要弱得多。