Bash脚本重命名一堆文件夹

时间:2016-01-24 07:30:43

标签: 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 -=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个文件夹。

1 个答案:

答案 0 :(得分:1)

根据编号,您可以制作名称并使用mv命令:

#!/bin/bash
for i in {1..250}
do
    mv "-=$i=- Folder#$i" "Folder#$i"
done

使用基于Perl的rename命令(有时称为prename),您可以使用:

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

或者,鉴于修订后的问题(模式之后的信息未修复):

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

这很有效!你能解释它是如何工作的吗?什么是\d+

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

我不确定你是如何使用基于C的rename命令来完成这项工作的;它的功能远不如基于Perl的版本。

相关问题