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 版本要弱得多。
我有一个看起来有点像这样的目录:
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 版本要弱得多。