如何重命名(通过添加前缀)从当前文件夹开始的所有文件和文件夹?
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
我可以编写以下脚本来完成它。但它对我的情况并不完美。
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