删除目录中所有文件夹名称的第一个单词

删除目录中所有文件夹名称的第一个单词

有人知道如何编写一个可以重命名目录中所有文件夹的 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

相关内容