项目中常用的shell脚本

10 篇文章 1 订阅

本文主要记录一下项目脚本中常常会使用到shell命令。以前处理文件夹和文件我更多选择python,提供了接口很方便。但是最近发现其实这些功能shell命令就能完成,而且更加简洁。更重要的,大多数shell命令是跨平台的,不像python那样还需要安装解释器。因此我尝试将项目中常常需要用到的功能记录下来。

1.获得项目根路径

假设我们的项目路径为root,root下存在scripts文件夹存放我们的所有脚本。有些时候,我们可能会在root下执行脚本,例如./scripts/xxx.sh,也可能会直接在scripts下执行脚本,./xxx.sh。如果我们统一脚本中的一些路径,可以采取先获得项目根路径,再依据根路径设置其他文件。如下:

#!/bin/bash

PROJECT_ROOT=$(cd `dirname $0`/../; pwd)
INCLUDE_DIR=$PROJECT_ROOT/include
SOURCE_DIR=$PROJECT_ROOT/src
ALL_DIRS="$INCLUDE_DIR $SOURCE_DIR"

2.递归获取文件夹下所有路径

find $ALL_DIRS -type d

3.递归获取文件夹下所有文件

find $ALL_DIRS -type f

4.递归获取文件夹下所有文件名

find $ALL_DIRS -type f -exec basename {} \;

5.递归获取文件夹下符合条件后缀的文件

find $ALL_DIRS -type f -name "*.cpp" -o -name "*.hpp"

6.递归获取文件夹下符合条件后缀的文件,及其的行数

find $ALL_DIRS -type f -name "*.cpp" -o -name "*.hpp" | xargs wc -l;

忽略注释行之后:

find $ALL_DIRS -type f -name "*.cpp" -o -name "*.hpp" | xargs cat | grep -v -e ^$ -e ^\s*\/\/.**$ | wc -l

7.递归获取文件夹下符合条件后缀的文件,替换所有文件的符合条件的字符

# ORI_STR="old"
# DST_STR="new"
# find $ALL_DIRS -type f -name "*.cpp" -o -name "*.hpp" -exec sed -i "s/$ORI_STR/$DST_STR/g" {} \;

如果要替换的字符串比较多,可以使用字典

declare -A dic
dic=(["abcd"]="ABCD" ["bcde"]="BCDE")
for key in $(echo ${!dic[*]})
do
    find $ALL_DIRS -type f -name "*.cpp" -o -name "*.hpp" -exec sed -i "s/$key/${dic[$key]}/g" {} \;
done
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值