不在某些目录查找字符的shell脚本

来源:互联网 发布:ubuntu修改系统语言 编辑:程序博客网 时间:2024/05/19 20:56

需求:不同版本的程序包含大量相同的文件,且不同的程序版本比较分散不容易通过直接找到目录去grep

-------------------------------------------------------------------------------------------------------------------------------------------------

最后起作用的命令是  

find ./   -path  *dir1*  -o  -path  *dir2*   -o -apth  *dir3* -prune -o  -print |xargs grep "string"  -nws

-------------------------------------------------------------------------------------------------------------------------------------------------

脚本内容:

#!/bin/sh


dirs=("dir1" "dir2" "dir3" "dir4" "dir5")

#中间有空格

function  find_exdir()

{

for f1 in ${dirs[@]};do

#for的使用for  ;do  done

if [ f1 != $1 ]

#注意if 与[ ,!=和变量和]之间都有一个空格

then

arg+="-path '*f1*' -o "

fi

done


arg2=${arg%-o*}

#字符串截取,删除字符串最右端第一个-o*匹配的子串,保留其余部分,搜索shell字符串截取有更过更灵活的使用格式


find ./ arg2 -prune -o -print | xargs grep "$2" -ns

#主要命令在当前目录查找(跳过arg2中的目录)并且对这些文件执行grep

return 1;

}


#main

#{

if [ -z "$1" -o -z "$2"];

#if 中的多个条件-o代表or  -a代表and  -z判断参数是否为空,搜索shell if 能够看到更多

then

echo "arg null"

else

find_exdir $1 $2

fi

#}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

想让自己的脚本不用在绝对路径可以通过添加环境变量的方式 PATH

export PATH=[pwd]:$PATH

在脚本的目录pwd,然后如上将这个目录追加到PATH中

echo $PATH

验证是否操作成功

如此后就可以在任意位置直接输脚本名称来执行了

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

如此之后执行后发现脚本没起作用,但是如果把脚本转化为在命令行直接执行则work,

查百度:

查看用户的默认shell是什么 在/etc/passwdroot:x:0:0:root:/root:/bin/bash然后在shell脚本第一行就写上什么shell#!/bin/bash
也可以通过echo $SHELL查看当前的shell类型

修改为#!/bin/bash后还是问题仍然没解决

find命令中将 -path ‘*abcd*’  改为  -path *abcd*  即可

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

prune  英文原意 减少 修建

在find中与-path  一起使用意思是在find的时候跳过这些path



0 0