如何使用终端递归替换文件和目录名称?

时间:2016-11-17 16:38:11

标签: macos recursion replace terminal

在macOS上使用终端,我想以递归方式替换一个具有目录和文件名名称的单词。例如,我有一个角度应用程序,模块名称是文章,所有文件名和目录名称都包含文章。我已经完成了一个查找和替换,用代码中的苹果替换文章。现在我想对文件结构做同样的事情,因此文件名和目录共享相同的约定。

仅仅是为了获取信息,我已经尝试使用最新的Yeoman生成器来创建新文件,但似乎存在问题。另一种方法是复制目录并重命名所有文件,这非常耗时。

1 个答案:

答案 0 :(得分:0)

使用以下脚本

var=$1
if [ -n "$var" ]; then
    CRUDNAME=$1
    CRUDNAMEUPPERCASE=`echo ${CRUDNAME:0:1} | tr  '[a-z]' '[A-Z]'`${CRUDNAME:1}
    FOLDERNAME=$CRUDNAME's'
    # Create new folder
    cp -R modules/articles modules/$FOLDERNAME
    # Do the find/replace in all the files
    find modules/$FOLDERNAME -type f -print0 | xargs -0 sed -i -e 's/Article/'$CRUDNAMEUPPERCASE'/g'
    find modules/$FOLDERNAME -type f -print0 | xargs -0 sed -i -e 's/article/'$CRUDNAME'/g'
    # Delete useless files due to sed
    rm modules/$FOLDERNAME/**/*-e
    rm modules/$FOLDERNAME/**/**/*-e
    rm modules/$FOLDERNAME/**/**/**/*-e
    # Rename all the files
    for file in modules/$FOLDERNAME/**/*article* ; do mv $file ${file//article/$CRUDNAME} ; done
    for file in modules/$FOLDERNAME/**/**/*article* ; do mv $file ${file//article/$CRUDNAME} ; done
    for file in modules/$FOLDERNAME/**/**/**/*article* ; do mv $file ${file//article/$CRUDNAME} ; done
else
    echo "Usage: sh rename-module.sh [crud-name]"
fi
显然,我并不是唯一遇到此问题的人

https://github.com/meanjs/generator-meanjs/issues/79