如何重命名(通过添加前缀)从当前文件夹开始的所有文件和文件夹?

How to rename(by adding a prefix) all the files and folders starting from the current folder?

我可以编写以下脚本来完成它。但它对我的情况并不完美。

CCUSTOMER_NAME="Abcd"
PATHS=$(find . -name "Template*")

echo $path

for path in $PATHS
do
    name=$(basename $path)
    newname=${CUSTOMER_NAME}"$(echo "$name" | cut -c9-)"
    mv "$name" "$newname"
done

我的文件夹结构如下。

-/TemplateProjectA
-/TemplateProjectB
   -/TemplateFiles
     -/TemplateMyFile.xml
-/TemplateProjectC

目前,它的输出如下

-/<CUSTOMER_NAME>ProjectA
-/<CUSTOMER_NAME>ProjectB
   -/TemplateFiles
     -/TemplateMyFile.xml
-/<CUSTOMER_NAME>ProjectC

如您所见,它遗漏了两个文件并出现以下错误。

mv: cannot stat 'TemplateFiles': No such file or directory
mv: cannot stat 'TemplateMyFile.xml': No such file or directory

原因是,我首先列出以“模板”开头的 folders/files 的路径。但是它首先重命名了外部文件夹并且无法找到内部文件夹files/folders。我无法在任何地方找到正确描述的类似 sinario。

非常感谢任何帮助!!

先对所有候选 files/directories 进行倒序排序,可以防止先重命名外部文件夹的问题:

MATCH=Template
REPLACEMENT=Abcd

find -name "${MATCH}*" | sort -r | while read path; do
    newname=$(basename ${path} | sed "s/${MATCH}/${REPLACEMENT}/")
    mv "${path}" "$(dirname ${path})/${newname}"  
done