替换文件名,文件夹名称和文件内容中的出现次数

时间:2014-06-30 16:02:05

标签: python bash shell

我的文件夹和文件具有以下结构,其中一些文件包含字符串ModuleName

ModuleName
├── Application\ Logic
│   └── Interactor
│       ├── ModuleNameInteractor.swift
│       └── ModuleNameInteractorIO.swift
├── Module\ Interface
│   └── IModuleNameModule.swift
└── User\ Interface
    ├── Presenter
    │   └── ModuleNamePresenter.swift
    ├── View
    │   ├── IModuleNameView.swift
    │   └── ModuleNameViewController.swift
    └── Wireframe
        └── ModuleNameWireframe.swift

我希望用Linux或python脚本替换文件夹名称,文件名和文件内容中ModuleName的所有匹配项(换句话说TestModule)。< / p>

我尝试使用find命令,但为子文件夹/子文件重命名文件夹provoque No such file or directory

2 个答案:

答案 0 :(得分:1)

我使用sed -i(就地替换)进行内容替换,并使用find|while read循环进行重命名。

这是BSD sed(Mac上的标准)版本:

find . -type f -exec sed -e s/ModuleName/TestModule/g -i '' '{}' ';'
find . -depth -name '*ModuleName*' -print0|while IFS= read -rd '' f; do mv -i "$f" "$(echo "$f"|sed -E 's/(.*)ModuleName/\1TestModule/')"; done

这里是GNU sed:

find . -type f -exec sed -e s/ModuleName/TestModule/g -i '{}' ';'
find . -depth -name '*ModuleName*' -print0|while IFS= read -rd '' f; do mv -i "$f" "$(echo "$f"|sed -r 's/(.*)ModuleName/\1TestModule/')"; done

while read中的额外细节是正确处理任意文件名 - 带空格和其他奇数字符的名称。一些快速测试表明,zsh read现在可以正确处理以null结尾的字符串;如果您遇到问题,请尝试在bash中运行它。

答案 1 :(得分:0)

尝试与终端作战之后,我发现免费提供here的Massreplaceit应用程序可以非常轻松地解决此问题

PS:我不在那儿工作!