linux - 如何重命名(通过添加前缀)从当前文件夹开始的所有文件和文件夹?
问题描述
我可以编写以下脚本来完成它。但它并不适合我的情况。
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
原因是,我首先列出以“模板”开头的文件夹/文件的路径。但它首先重命名外部文件夹并且无法找到内部文件/文件夹。我在任何地方都找不到正确描述的类似 sinario。
非常感谢任何帮助!
解决方案
可以通过先对所有候选文件/目录进行倒序排序来防止先重命名外部文件夹的问题:
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
推荐阅读
- octave - 八度音阶的 lsode 函数
- java - SharedPreferences Java Android Studio
- google-maps - OnMapReadyCallback 未使用 Navhost 传输到嵌套多窗格布局中的父片段
- php - laravel 8 不像 7x 版本那样设置主页
- python-3.x - 尽管 Selenium WebDriver 只有部分页面被解析
- macos - 如何从命令行在 macOS Catalina 上设置“点击以单击”行为?
- jpa - @Query - 返回原始类型或字符串对象?
- c++ - 用函数包装以返回不同的类型
- laravel - Laravel 列求和
- python - ImportError:libQt5QmlModels.so.5:无法打开共享对象文件:没有这样的文件或目录?