find xargs

shell学习笔记二:find 和xargs

1.       find命令

find pathname -options [-print -exec -ok]

pathname    find命令所查找的目录路径。

-print      find命令将匹配的文件输出到标准输出。

-exec       find命令对匹配的文件执行该参数所给出的s h e l l命令。

-ok         和- e x e c的作用相同,只不过以一种更安全的方式执行.

 

ex

   使用name选项

     $ find ~ -name "*.txt" –print

        不管你现在在什么目录中,在自己的根目录中按文件名查找所有以”.txt”结尾的文件,输出到标准输出

~代表了你的$home目录

     $ find . -name "[A-Z]*" –print

          在当前目录及子目录中查找文件名以一个大写字母开头的文件

     $ find /etc -name "host*" –print

          在/etc目录中查找以”host”开头的文件

     $ find / -name "*" –print

          从根目录开始查找所有的文件

     $ find . -name "[a-z][a-z][0--9][0--9].txt" –print

          从当前目录及其子目录中查找以两个小写字母开头,跟着两个数字,并且以.txt结尾的文件

  使用perm选项

$ find . -perm 755 –print

 在当前目录下查找文件权限为755的文件

$ find . -perm -007 –print

在当前目录下查找所有用户都可读写执行的文件(小心这种情况,find可能执行较长时间)

   忽略某个目录

$ find /apps -name "/apps/bin" -prune -o –print

希望在/ a p p s目录下查找文件,但不希望在/ a p p s / b i n目录下查找

我运行之后好像不对,此处有疑问 ?

使用user和nouser选项

  $ find ~ -user dave –print

$ find /etc -user uucp –print

$ find /home -nouser –print

在/home目录中查找账户已经被删除的文件

使用group和nogroup选项

$ find /apps -group accts –print

$ find / -nogroup –print

从文件系统的根目录处查找没有有效所属用户组的所有文件

按照更改时间查找文件

$ find / -mtime -5 –print

在系统根目录下查找更改时间在5日以内的文件

$ find /var/adm -mtime +3 –print

在/ v a r / a d m目录下查找更改时间在3日以前的文件

查找比某个文件新或旧的文件

 $ find –newer oldfile.txt ! –newer newfile.txt

 按字面意思一个可理解,即找比oldfile.txt  newer的文件,而不比newfile.txt newer的文件,也就是比oldfile新比newfile旧的文件

 

查找更改时间在两个小时以内的文件(假设现在是12月21日12点半)

 1. touch –t 12211030  dstamp   创建一个时间戳为12月21日10点半的文件

 2. ls –l dstamp

 3. $ find . -newer dstamp –print

 

使用type选项

$ find /etc -type d –print

在/ e t c目录下查找所有的目录

$ find . ! -type d –print

在当前目录下查找除目录以外的所有类型的文件

$ find /etc -type l –print

在/ e t c目录下查找所有的符号链接文件

使用size选项

$ find . -size +1000000c –print

在当前目录下查找文件长度大于1 M字节的文件

$ find /home/apache -size 100c –print

在/ h o m e / a p a c h e目录下查找文件长度恰好为1 0 0字节的文件

$ find . -size +10 –print

在当前目录下查找长度超过1 0块的文件(一块等于5 1 2字节)

使用depth选项

$ find / -name "CON.FILE" -depth –print

从文件系统的根目录开始,查找一个名为C O N . F I L E的文件。

它将首先匹配所有的文件然后再进入子目录中查找。

使用mount选项

$ find . -name "*.XC" -mount -print

从当前目录开始查找位于本文件系统中文件名以X C结尾的文件(不进入其他文件系统)

使用cpio选项

c p i o命令可以用来向磁带设备备份文件或从中恢复文件。可以使用f i n d命令在整个文件系

统中(更多的情况下是在部分文件系统中)查找文件,然后用c p i o命令将其备份到磁带上。

如果希望使用c p i o命令备份/ e t c、/ h o m e和/ a p p s目录中的文件,可以使用下面所给出的命

令,不过要记住你是在文件系统的根目录下:

  $ cd /

  $ find etc home apps –depth –print | cpio –ivcdc65536 –o \

    /dev/rmt0

 

(在上面的例子中,第一行末尾的\告诉s h e l l命令还未结束,忽略\后面的回车。)

在上面的例子中,应当注意到路径中缺少/。这叫作相对路径。之所以使用相对路径,是

因为在从磁带中恢复这些文件的时候,可以选择恢复文件的路径。例如,可以将这些文件先

恢复到另外一个目录中,对它们进行某些操作后,再恢复到原始目录中。如果在备份时使用

了绝对路径,例如/ e t c,那么在恢复时,就只能恢复到/ e t c目录中去,别无其他选择。在上面

的例子中,我告诉f i n d命令首先进入/ e t c目录,然后是/ h o m e和/ a p p s目录,先匹配这些目录下

的文件,然后再匹配其子目录中的文件,所有这些结果将通过管道传递给c p i o命令进行备份。

顺便说一下,在上面的例子中c p i o命令使用了C 6 5 5 3 6选项,我本可以使用B选项,不过这

样每块的大小只有5 1 2 字节,而使用了C 6 5 5 3 6 选项后,块的大小变成了6 4 K 字节

(6 5 5 3 6 / 1 0 2 4)。

使用exec或ok来执行shell命令

e x e c选项后面跟随着所要执行的命令,然后是一对儿{ },一个空格和一个\,最后是一个分号。为了使用e x e c选项,必须要同时使用p r i n t选项。

$ find . –type f –exec ls –l {} \;

$ find logs -type f -mtime +5 -exec rm {} \;

在/ l o g s目录中查找更改时间在5日以前的文件并删除它们

在s h e l l中用任何方式删除文件之前,应当先查看相应的文件,一定要小心!

$ find . –name “*.log” –mtime+5 –ok rm {} \;

在当前目录中查找所有文件名以. L O G结尾、

更改时间在5日以上的文件,并删除它们,在删除之前先给出提示。

$ find /etc –name “password*”-exec grep “rounder”{} \;

匹配所有文件名为“ p a s s w d *”的文件,例如p a s s w d、p a s s w d . o l d、p a s s w d . b a k,然后执行g r e p命令看看在这些文件中是否存在一个r o u n d e r用户。

使用xargs

$ find . -name "core" -print | xargs echo "" >/tmp/core.log

在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中 

$ find /apps/audit -perm -7 -print | xargs chmod o-w

子在/ a p p s / a u d i t目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限:

$ find / -type f -print | xargs grep "device"

用g r e p命令在所有的普通文件中搜索d e v i c e这个词

$ find . -name *\-type f -print | xargs grep "DBO"

用g r e p命令在当前目录下的所有普通文件中搜索D B O这个词,\用来取消f i n d命令中的*在s h e l l中的特殊含义

你可能感兴趣的:(c,shell,user)