我有一个看起来像这样的目录:
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个文件夹。
答案 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的版本。