Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!bin/bash
- # 读取头文件
- parse_yaml(){
- local prefix=$2
- local s='[[:space:]]*' w='[a-zA-Z0-9_]*' fs=$(echo @|tr @ '\034')
- # 1,10s 表示只看前10行。
- sed -ne "1,10s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \
- -e "1,10s|^\($s\)\($w\)$s:$s\(.*\)$s\$|\1$fs\2$fs\3|p" $1 |
- awk -F$fs '{
- indent = length($1)/2;
- vname[indent] = $2;
- for (i in vname) {if (i > indent) {delete vname[i]}}
- if (length($3) > 0) {
- vn=""; for (i=0; i<indent; i++) {vn=(vn)(vname[i])("_")}
- printf("%s%s%s=\"%s\"\n", "'$prefix'",vn, $2, $3);
- }
- }'
- }
- showFileInfo(){
- oldIFS=$IFS
- IFS="#"
- #parse_yaml $1 "config_"
- eval $(parse_yaml $1 "config_")
- tags=${config_tags//[$'\t\r\n']/}
- cates=${config_categories//[$'\t\r\n']/}
- checkTags $1 $tags
- checkCategories $1 $cates
- IFS=$oldIFS
- }
- checkTags(){
- tags=$(tag --list --no-name $1)
- if [ -z $tags ]
- then
- realtags='[无标签]'
- else
- # 两个斜杠表示替换所有
- realtags="[${tags//,/, }]"
- fi
- if [ "$2" = "$realtags" ];
- then
- if [ $showInfo = true ]
- then
- echo $1 ' ' tags ✓ ' '
- fi
- else
- echo "$1 tags: \"$2\" --> \"$realtags\""
- if [ $fixit = true ]
- then
- # 整行替换以 “tags:” 开头的那一行
- sed -i '' "s/^[[:blank:]]*tags:.*/tags: $realtags/" $1
- fi
- fi
- }
- checkCategories(){
- # 截取子路径
- subpath=${1/$dirPath/}
- # 截取文件名
- filename=${1##*/}
- subpath=${subpath/$filename/}
- cates=${2//[\[\] ]/}
- cates=/${cates//,/\/}/
- if [ $subpath = $cates ]
- then
- if [ $showInfo = true ]
- then
- echo $1 ' ' categories ✓
- fi
- else
- #删除前面的 “/”
- catesname=${subpath#*\/}
- #删除前面的 “后面的 /”
- catesname=${catesname%/*}
- catesname="[${catesname/\//, }]"
- echo "$1 categories: \"$2\" --> \"${catesname}\""
- if [ $fixit = true ]
- then
- # 整行替换以 “categories:” 开头的那一行
- sed -i '' "s/^[[:blank:]]*categories:.*/categories: ${catesname}/" $1
- fi
- fi
- }
- export -f showFileInfo
- export -f parse_yaml
- export -f checkTags
- export -f checkCategories
- #export dirPath='.'
- export dirPath='../source/_posts'
- export timelimit=3
- export fixit=false
- export showInfo=false
- # 读取用户设定
- readArgs(){
- echo '默认目录:' $dirPath
- read -p '更改目录请输入(不更改直接回车):' arg
- if [ -n "$arg" ]
- then
- dirPath=$arg
- fi
- read -p "时间限定(天数 ${timelimit}天,不更改直接回车):" arg
- if [ -n "$arg" ]
- then
- timelimit="-${arg}d" # 时间限制
- else
- timelimit="-${timelimit}d"
- fi
- read -p '自动修改请输入“fix”,否则只作检查:' arg
- if [ "$arg" = "fix" ]
- then
- fixit=true
- fi
- read -p '是否显示所有信息?(输入 y 确认):' arg
- if [ "$arg" = "y" ]
- then
- showInfo=true
- fi
- }
- readArgs
- find $dirPath -type f -name "*.md" | xargs -n 1 -P 10 -I {} bash -c 'showFileInfo "$@"' _ {} \;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement