首页 > 代码库 > 7.3 文件查找

7.3 文件查找

7.3

测试:

  整数测试

   -le -lt 

  字符测试

   == != > < -n -z(字符测试,开始说-s,错了)

  文件测试

    -e -f


if [ $# -gt 1 ];then


组合测试条件

  -a  与关系

  -o  或关系

  !   非关系


if [ $# -gt 1 -a $# -le 3 ]

if [ $# -gt 1 ] && [ $# -le 3 ]


q,Q,quit,Quit

#!/bin/bash

#

if [ $1 == ‘q‘ -o  $1 == ‘quit‘ -o $1 == ‘Q‘ -o $1 == ‘Quit‘ ];then

  echo "Quiting..."

  exit 0

else

  echo "Unkown Argument"

  exit 1

fi


写一个脚本:

计算100以内所有奇数和以及所有偶数的和:分别显示之:

#!/bin/bash

#

declare -i EVENSUM=0

declare -i ODDSUM=0


for I in (1..100);do

  if [ $[$I%/2] -eq 0 ];then

    let EVENSUM+=$I

  else

    let ODDSUM+=$I

  fi

done


echo "Odd sum is:$ODDSUM,Even sum is:$EVENSUM."


let I=$[$I+1]

SUM=$[$SUM+$I]


let SUM+=$I


let I+=1   相当于I++


-=

    let I-=1 相当于 let I--

    ++I --I

*=

/=

%=


grep egrep fgrep:文本查找


文件查找

locate:(用的不多)

   非实时,模糊匹配,查找是根据全系统文件数据库进行的

# updatedb,手动生成文件数据库

速度快


find:

   实时

   精确

   支持众多查找标准

   遍历指定目录中的所有文件完成查找,速度慢


find 查找路径 查找标准 查找到以后的处理动作

查找路径,默认为当前目录

查找标准:默认为指定路径下的所有文件

处理动作:默认为显示


匹配标准:

  -name ‘FILENAME‘,对文件名做精确匹配

        文件名通配

        *:任意长度的任意字符

        ?:

        []    find /etc -name ‘passwd‘

  -iname ‘FILENAME‘ :文件名匹配时不区分大小写

  -regex PATTERN 基于正则表达式进行文件名匹配

  -user USERNAME:根据属主查找

  -group GROUPNAME:根据属组查找

  -uid UID:根据UID查找

  -gid GID:根据GID查找

  若是用户被删除了,根据属主查找是找不到的,需要根据UID查找,

     原来属于此用户的文件属主直接是ID号

  -nouser:查找没有属主的文件

  -nogroup:查找没有属组的文件  

  -type

    f:普通文件

    d:

    c:

    b:

    l:

    p:

    s:

find /etc -type d


   -size  [+|-] +大于 -小于 不加[+|-]等于或小于

     #k

     #M

     #G

find /etc -size 10k -ls(显示文件大小)


组合条件:(默认-a)

   -a 与条件

   -o 或条件

   -not

时间戳:

   -mtime

   -ctime

   -atime

     [+|-]# 多少天

   -mmin

   -cmin

   -amin

     [+|-]# 多少分钟

根据权限查找

   -perm

      mode  精确匹配

      -mode 每一位都必须匹配,文件权限能完全包含此mode时才能显示

      +mode(废弃)

      /mode 有一个匹配,任意一位匹配即满足条件

find ./ -perm 644

find ./ -perm -001 查找其他用户有执行权限的


动作:

  -print:显示

  -ls:类似ls -l的形式显示每一个文件的详细信息

  -ok COMMAND {} \; {}文件名称占位符 每一次操作都需要用户确认

  -exec COMMAND {} \; 不需要用户确认


find ./ -perm -006 -exec chmod 0-w {} \;

find ./ -type d -ok +x {} \;


find /tmp -nouser -a -type d ls

find /tmp -not -type -d


find ./ -perm -020 -exec mv {} {}.new \;

find ./ -name "*.sh" -a -perm -111 -exec chmod o-x {} \;


/tmp目录,不是目录,并且还不能是套接字类型的文件

find /tmp -not -type d -a -not -type s -a -type f


/tmp/test目录下,属主不是user1,也不是user2的文件

find ./ -not -user user2 -a -not -user user2

find ./ -not \( -user user1 -a -user user2 \)


find ./ -not \(-user user1 -a -type d\)


练习:

1 查找/var目录下属主为root并且属组为mail的所有文件

  find /var -user root -group mail

 

2 查找/usr目录下不属于root,bin,或student的文件

  find /usr -not -user \(root | bin | student\) 错误

  find /usr -not -user root -a -not -user bin -a -not user studnet 对

  find /usr -not \(-user root -o -user bin -o -user student\)对


3 查找/etc目录下最近一周内内容修改过且不属于root及student

  用户的文件

  find /etc -mtime 7 -a -not -user root -a -not -user student 

  find /etc -mtime -7 -a -not \( -user root -o -user student \) 

  

4 查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,

  并且将其属主属组均修改为root

 find / \( -nouser -o -nogroup \) -a -atime -1 -exec chpwn root:root {} \;


5 查找/etc目录下大于1M的文件,并将其文件名写入

  /tmp/etc.largefiles文件中

find /etc -size +1M >> /tmp/etc.largefiles


6 查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息

 find /etc -not -perm /222 -ls


7.3 文件查找