shell脚本遍历文件夹下及其子文件下所有文件,本且替换指定文本

今天写了一个需求,在linux上,对一个文件夹下的所有文件中,指定的文本内容进行替换,比如

把 www.baidu.com 替换成 www.google.com

1.先熟悉几个linux命令

(1)新建文件夹 : mkdir  文件夹名

(2)新建文件:touch 文件名

(3)删除文件: rm 文件名

(4)删除文件夹:rm -rf 文件夹名 (删除文件夹内所有内容)

(5)查看文件内容:cat 文件名

(6)给脚本文件增加权限 chmod u+x file

2.shell脚本

#这是shell文件必须带的头

#! /bin/bash

#写一个函数,调用的时候不用带括号
function r(){

#for循环 这个``是esc下面的,意思是调用系统命令;$1指的是传进去函数里的第一变量
 for file in `ls $1`
 do

#shell的语法一定要注意空格,不写空格是会报错的;if的语法和java不一样,一定要注意

#这里的判断是判断是否为目录
     if [ -d $1"/"$file ]
    then

       #我这里的两个判断是我需要排除对这两个目录的遍历
        if [ $file == "node_modules" ]
        then
            echo $file"此目录排除,不替换"
        elif [ $file == "dist" ]
        then
            echo $file"此目录排除,不替换"
        
        else

#用一种递归的方法来遍历子目录
               echo $1"/"$file"为目录"
                r $1"/"$file
        fi
    else
        if [ $file == "replaceField.sh" ]
        then
            echo $file"此文件为本文件,不替换"
        else

#替换文件里的bp.datacastle.cn为bp.inedcn.com
            echo $1"/"$file "为文件"
            find -name $file | xargs perl -pi -e 's|bp.datacastle.cn|bp.inedcn.com|g'
        fi
           fi
 done
}
r .

 

 

 

你可能感兴趣的:(shell脚本遍历文件夹下及其子文件下所有文件,本且替换指定文本)