我的文件夹和文件具有以下结构,其中一些文件包含字符串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
。
答案 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:我不在那儿工作!