有人知道如何编写一个可以重命名目录中所有文件夹的 bash 脚本吗?它需要删除所有文件夹的第一个字。
目前它看起来像这样:
ABC DEF Folder1
ABC DEF Folder2
ABC DEF Folder3
...
ABC DEF Folder1000
删除相同的字母
ABC防御
实现
Folder1
Folder2
Folder3
...
Folder1000
我对 Linux 还不太熟悉,对 Bash 脚本还不太了解。有谁能提供一些提示/解决方案?
答案1
快速回答
我不会为剧本烦恼……只是rename
rename s/ABC\ DEF\ // *
s/string1/string2/ 导致它用字符串 2 搜索并替换字符串 1。
字符串 1 由于空格而变长,需要将其转义为 '\ ',字符串 2 为空 '//'
最后 * 强制它对当前目录中的所有文件/目录进行操作
阅读man rename
它将提供线索。主页引用“perlexprs”(perl 表达式;意味着更多man
页面),但它们是 POSIX 的超集,这意味着您拥有更多权力,但也只能将自己限制在 posix 上。
答案2
对于像这样的简单文本匹配(实际上不需要正则表达式的功能),还有mmv
例如
$ ls -d */
ABC DEF Folder1/ ABC DEF Folder3/ ABC DEF Folder6/ ABC DEF Folder9/
ABC DEF Folder10/ ABC DEF Folder4/ ABC DEF Folder7/
ABC DEF Folder2/ ABC DEF Folder5/ ABC DEF Folder8/
然后
mmv -r 'ABC DEF *' '#1'
结果是
$ ls -d */
Folder1/ Folder2/ Folder4/ Folder6/ Folder8/
Folder10/ Folder3/ Folder5/ Folder7/ Folder9/
值得一提的是,在 (bash 或 POSIX sh) shell 中编写脚本实际上并不需要太多工作 -
for f in */; do mv -- "$f" "${f#ABC DEF }"; done