find命令查找并删除.doc_第1页
find命令查找并删除.doc_第2页
find命令查找并删除.doc_第3页
find命令查找并删除.doc_第4页
find命令查找并删除.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Linux下find 命令用法详解+实例2010-02-23 21:44用法总结如下:简化文件系统的管理与大多数 UNIX 命令一样,UNIXfind命令具有一长串令人生畏的选项和开关,它们会阻碍人们深入地学习该命令,但正是因为其范围广阔,真正的 Explorer 并不会被它们吓倒。一条好的通用原则在简化一个复杂问题时都会经过漫长的过程。启动一个 xterm,并尝试执行下面的命令:$ find . -name *.gif -exec ls ;-exec参数中包含了真正有价值的操作。当查找到匹配搜索条件的文件时,-exec参数定义了将对这些文件进行什么操作。该示例告诉计算机进行如下操作:1. 从当前文件夹开始往下搜索,紧跟在find之后,使用点号 (.)。2. 定位所有名称以 .gif 结尾的文件(图形文件)。3. 列出所有查找到的文件,使用ls命令。需要对-exec参数进行更深入地研究。当查找到匹配搜索条件的文件名时,find命令执行ls 字符串,用文件名和路径代替文本.假设在搜索中查找到 saturn.gif 文件,find将执行如下所示的命令:$ ls ./gif_files/space/solar_system/saturn.gif本文余下的内容建立在这条一般原则之上:仔细地使用find命令可以让 UNIX 文件系统的管理工作变得更加容易。例如,如果您使用了-fstype参数,find命令可以根据查找到的文件所处的文件系统的类型来对命令进行相应的处理。在find命令对查找到的文件执行相应命令前将对您进行提示,这通常是非常有用的,您可以使用-ok参数告诉它继续执行该操作,接下来我们将对其进行介绍。可选的执行-ok是 -exec 参数的一个重要的替代项,它的行为和-exec一样,但它会提示您是否要对文件运行相应的命令。假设您想要删除 home 目录中的大部分 .txt 文件,但希望能够逐个文件地执行该操作。像 UNIX 中的rm命令那样的删除操作是很危险的,因为当使用像find这样的自动化处理方式来查找文件时,它可能一不小心会删除重要的文件,您也许希望在删除这些系统查找到的文件之前对其进行仔细检查。下面的命令列出了您的 home 目录中所有的 .txt 文件。要删除这些文件,必须在find命令通过列出文件名提示您确认操作时输入Y或者y:$ find $HOME/. -name *.txt -ok rm ;(第一种方式)$ find /root/linshi/ -name yum* -exec rm -f ;(第二种方式)这个不经过确认它列出了查找到的每个文件,并且系统将暂停以等待您输入Y或者y.如果您按下Enter键,系统将不会删除该文件。清单 1显示了一些示例结果:清单 1. 示例结果 ? ? ? ? ? ?.系统将在每个问号之后暂停,在本示例中,每次都按下了 Enter 键以继续处理下一个文件。(没有删除任何文件。)-ok参数允许您控制每个查找到的文件的自动化处理过程,这样就添加了一种避免自动删除文件的安全措施。如果在使用-ok参数时涉及到过多的文件,那么一个好的方法是先运行带-exec的find命令以列出所有将要删除的文件,然后在经过检查确保其中不会删除重要的文件后,再次运行该命令,其中用rm代替ls. -exec和-ok都非常有用,您必须确定在当前情况下哪一个能够更好的工作。请记住,安全第一!创造性地使用 find您可以使用find命令执行各种各样的任务。本部分内容提供了使用find命令来管理文件系统的几种方式的示例。为了保持简单,这些示例都避免了使用涉及通过管道将一个命令的输出传递到另一个命令的-exec命令。然而,您完全可以根据自己需要在 find 命令的-exec子句中使用这样的命令。清除临时文件您可以使用find命令来清除目录或子目录中在正常使用过程中生成的临时文件,这样可以节省磁盘空间。要实现该操作,请使用下面的命令:$ find . ( -name a.out -o -name *.o -o -name core ) -exec rm ;括号中的文件掩码标识出了需要删除的文件类型,每个文件掩码的前面都有-name.该列表可以扩展为包括您需要清除的系统中的任何临时文件类型。在代码的编译和连接过程中,程序员及其工具会生成示例中的那些文件类型:a.out, *.o和core.其他的用户通常也会生成类似的临时文件,可以使用如*.tmp, *.junk等文件掩码来对命令进行相应的编辑。您可能还发现将命令放入一个称作clean的脚本中非常有用,当需要清除一个目录中的内容的时候就可以执行该脚本。复制目录中的内容find命令允许您复制目录中的全部内容,同时保持每个文件和子目录的权限、时间和所有权。要完成该操作,需要组合使用find和cpio命令,如下所示:清单 2. 组合使用 find 和 cpio 命令$ cd /path/to/source/dir$ find . | cpio -pdumv /path/to/destination/dircpio命令是一个复制命令,它设计用来将文件复制到或复制出一个 cpio 或 tar 存档文件,并自动地保持文件和子目录的权限、时间和所有权。列出文本文件的第一行内容有些人使用每个文本文件的第一行作为标题或者文件内容的描述。可以使用列出文件名和所有文本文件第一行内容的报表更方便地对大量的文本文件进行筛选。下面的命令在报表中列出了您的 home 目录中所有文本文件的第一行内容,便于进一步地根据需要使用less命令进行检查:清单 3. less 命令$ find $HOME/. -name *.txt -exec head -n 1 -v ; report.txt$ less -perm #按执行权限来查找-user username #按文件属主来查找-group groupname #按组来查找-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前-atime -n +n #按文件访问时间来查找文件,-n指n天以内,+n指n天以前-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存-newer f1 !f2 找文件,-n指n天以内,+n指n天以前-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存-newer f1 !f2 #查更改时间比f1新但比f2旧的文件-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件-size nc #查长度为n块或n字节的文件-depth #使查找在进入子目录前先行查找完本目录-fstype #查更改时间比f1新但比f2旧的文件-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件-size nc #查长度为n块或n字节的文件-depth #使查找在进入子目录前先行查找完本目录-fstype #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到-mount #查文件时不跨越文件系统mount点-follow #如果遇到符号链接文件,就跟踪链接所指的文件-cpio %; #查位于某一类型文件系统中的文件,这些文件系统类型通常可 在/etc/fstab中找到-mount #查文件时不跨越文件系统mount点-follow #如果遇到符号链接文件,就跟踪链接所指的文件-cpio #对匹配的文件使用cpio命令,将他们备份到磁带设备中-prune #忽略某个目录=$find -name *.txt -print #在$HOME中查.txt文件并显示$find . -name *.txt -print$find . -name A-Z* -pri26nbsp; #对匹配的文件使用cpio命令,将他们备份到磁带设备中-prune #忽略某个目录=$find -name *.txt -print #在$HOME中查.txt文件并显示$find . -name *.txt -print$find . -name A-Z* -print #查以大写字母开头的文件$find /etc -name host* -print #查以host开头的文件$find . -name a-za-z0-90-9.txt -print #查以两个小写字母和两个数字开头的txt文件$find . -perm 755 -print$find . -perm -007 -exec ls -l ; #查所有用户都可读写执行的文件同-perm 777$find . -type d -print$find . ! -type d -print$find . -type l -print$find . -size +1000000c -print #查长度大于1Mb的文件$find . -size 100c -print # 查长度为100c的文件$find . -size +10 -print #查长度超过期作废10块的文件(1块=512字节)$cd /$find etc home apps -depth -print | cpio -ivcdC65536 -o /dev/rmt0$find /etc -name passwd* -exec grep cnscn ; #看是否存在cnscn用户$find . -name yao* | xargs file$find . -name yao* | xargs echo /tmp/core.log$find . -name yao* | xargs chmod o-w=find -name april* 在当前目录下查找以april开始的文件find -name april* fprint file 在当前目录下查找以april开始的文件,并把结果输出到file中find -name ap* -o -name may* 查找以ap或may开头的文件find /mnt -name tom.txt -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件find /mnt -name t.txt ! -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件find /tmp -name wa* -type l 在/tmp下查找名为wa开头且类型为符号链接的文件find /home -mtime -2 在/home下查最近两天内改动过的文件find /home -atime -1 查1天之内被存取过的文件find /home -mmin +60 在/home下查60分钟前改动过的文件find /home -amin +30 查最近30分钟前被存取过的文件find /home -newer tmp.txt 在/home下查更新时间比tmp.txt近的文件或目录find /home -anewer tmp.txt 在/home下查存取时间比tmp.txt近的文件或目录find /home -used -2 列出文件或目录被改动过之后,在2日内被存取过的文件或目录find /home -user cnscn 列出/home目录内属于用户cnscn的文件或目录find /home -uid +501 列出/home目录内用户的识别码大于501的文件或目录find /home -group cnscn 列出/home内组为cnscn的文件或目录find /home -gid 501 列出/home内组id为501的文件或目录find /home -nouser 列出/home内不属于本地用户的文件或目录find /home -nogroup 列出/home内不属于本地组的文件或目录find /home -name tmp.txt -maxdepth 4 列出/home内的tmp.txt 查时深度最多为3层find /home -name tmp.txt -mindepth 3 从第2层开始查find /home -empty 查找大小为0的文件或空目录find /home -size +512k 查大于512k的文件find /home -size -512k 查小于512k的文件find /home -links +2 查硬连接数大于2的文件或目录find /home -perm 0700 查权限为700的文件或目录find /tmp -name tmp.txt -exec cat ;find /tmp -name tmp.txt -ok rm ;find / -amin -10 # 查找在系统中最后10分钟访问的文件find / -atime -2 # 查找在系统中最后48小时访问的文件find / -empty # 查找在系统中为空的文件或者文件夹find / -group cat # 查找在系统中属于 groupcat的文件find / -mmin -5 # 查找在系统中最后5分钟里修改过的文件find / -mtime -1 #查找在系统中最后24小时里修改过的文件find / -nouser #查找在系统中属于作废用户的文件find / -user fred #查找在系统中属于FRED这个用户的文件查当前目录下的所有普通文件-# find . -type f -exec ls -l ;-rw-r-r- 1 root root 34928 2003-02-25 ./conf/httpd.conf-rw-r-r- 1 root root 12959 2003-02-25 ./conf/magic-rw-r-r- 1 root root 180 2003-02-25 ./conf.d/README查当前目录下的所有普通文件,并在- e x e c选项中使用ls -l命令将它们列出=在/ l o g s目录中查找更改时间在5日以前的文件并删除它们:$ find logs -type f -mtime +5 -exec -ok rm ;=查询当天修改过的文件rootbook class# find ./ -mtime -1 -type f -exec ls -l ;=查询文件并询问是否要显示rootbook class# find ./ -mtime -1 -type f -ok ls -l ; ? y-rw-r-r- 1 cnscn cnscn 13709 1月 12 12:22 ./classDB.inc.phprootbook class# find ./ -mtime -1 -type f -ok ls -l ; ? nrootbook class#=查询并交给awk去处理rootbook class# who | awk print $1t$2cnscn pts/0=awk-grep-sedrootbook class# df -k | awk prin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论