find命令查找并删除

  • 格式:doc
  • 大小:73.00 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux下find 命令用法详解+实例

2010-02-23 21:44

用法总结如下:

简化文件系统的管理

与大多数UNIX 命令一样,UNIX find 命令具有一长串令人生畏的选项和开关,它们会阻碍人们深入地学习该命令,但正是因吓倒。一条好的通用原则在简化一个复杂问题时都会经过漫长的过程。启动一个xterm,并尝试执行下面的命令:

$ find . -name *.gif -exec ls {} \;

-exec 参数中包含了真正有价值的操作。当查找到匹配搜索条件的文件时,-exec 参数定义了将对这些文件进行什么操作。该

1. 从当前文件夹开始往下搜索,紧跟在find 之后,使用点号(.)。

2. 定位所有名称以 .gif 结尾的文件(图形文件)。

3. 列出所有查找到的文件,使用ls命令。

需要对-exec 参数进行更深入地研究。当查找到匹配搜索条件的文件名时,find 命令执行ls {}字符串,用文件名和路径代件,find 将执行如下所示的命令:

$ ls ./gif_files/space/solar_system/saturn.gif

本文余下的内容建立在这条一般原则之上:仔细地使用find 命令可以让UNIX 文件系统的管理工作变得更加容易。例如,如果根据查找到的文件所处的文件系统的类型来对命令进行相应的处理。在find命令对查找到的文件执行相应命令前将对您进行提示数告诉它继续执行该操作,接下来我们将对其进行介绍。

可选的执行

-ok是-exec 参数的一个重要的替代项,它的行为和-exec一样,但它会提示您是否要对文件运行相应的命令。假设您想要删能够逐个文件地执行该操作。像UNIX 中的rm命令那样的删除操作是很危险的,因为当使用像find这样的自动化处理方式来件,您也许希望在删除这些系统查找到的文件之前对其进行仔细检查。

下面的命令列出了您的home 目录中所有的 .txt 文件。要删除这些文件,必须在find命令通过列出文件名提示您确认操作时输

$ find $HOME/. -name *.txt -ok rm {} \;(第一种方式)

$ find /root/linshi/ -name "yum*" -exec rm -f {} \;(第二种方式)这

个不经过确认

它列出了查找到的每个文件,并且系统将暂停以等待您输入Y或者y. 如果您按下Enter键,系统将不会删除该文件。清单1显

清单 1. 示例结果

< rm ... /home/bill/./.kde/share/apps/karm/karmdata.txt > ?

< rm ... /home/bill/./archives/LDDS.txt > ?

< rm ... /home/bill/./www/txt/textfile1.txt > ?

< rm ... /home/bill/./www/txt/faq.txt > ?

< rm ... /home/bill/./www/programs/MIKE.txt > ?

< rm ... /home/bill/./www/programs/EESTRING.txt > ?

.

.

.

系统将在每个问号之后暂停,在本示例中,每次都按下了Enter 键以继续处理下一个文件。(没有删除任何文件。)-ok 参数允这样就添加了一种避免自动删除文件的安全措施。

如果在使用-ok参数时涉及到过多的文件,那么一个好的方法是先运行带-exec 的find命令以列出所有将要删除的文件,然再次运行该命令,其中用rm代替ls. -exec和-ok都非常有用,您必须确定在当前情况下哪一个能够更好的工作。请记住

创造性地使用find

您可以使用find命令执行各种各样的任务。本部分内容提供了使用find命令来管理文件系统的几种方式的示例。

为了保持简单,这些示例都避免了使用涉及通过管道将一个命令的输出传递到另一个命令的-exec命令。然而,您完全可以根据这样的命令。

清除临时文件

您可以使用find 命令来清除目录或子目录中在正常使用过程中生成的临时文件,这样可以节省磁盘空间。要实现该操作,请使

$ find . \( -name a.out -o -name '*.o' -o -name 'c

ore' \) -exec rm {} \;

括号中的文件掩码标识出了需要删除的文件类型,每个文件掩码的前面都有-name. 该列表可以扩展为包括您需要清除的系统中程中,程序员及其工具会生成示例中的那些文件类型:a.out, *.o 和core. 其他的用户通常也会生成类似的临时文件,可命令进行相应的编辑。您可能还发现将命令放入一个称作clean的脚本中非常有用,当需要清除一个目录中的内容的时候就可以

复制目录中的内容

find 命令允许您复制目录中的全部内容,同时保持每个文件和子目录的权限、时间和所有权。要完成该操作,需要组合使用f

清单 2. 组合使用find 和cpio 命令

$ cd /path/to/source/dir

$ find . | cpio -pdumv /path/to/destination/dir

cpio命令是一个复制命令,它设计用来将文件复制到或复制出一个cpio 或tar 存档文件,并自动地保持文件和子目录的权限列出文本文件的第一行内容

有些人使用每个文本文件的第一行作为标题或者文件内容的描述。可以使用列出文件名和所有文本文件第一行内容的报表更方便地表中列出了您的home 目录中所有文本文件的第一行内容,便于进一步地根据需要使用less命令进行检查:

清单 3. less 命令

$ find $HOME/. -name *.txt -exec head -n 1 -v {} \; > report.txt

$ less < report.txt

维护LOG 和TMP 文件的存储空间

要为生成大量文件的应用程序维护LOG 和TMP 文件存储空间,可以将下列命令放入到每天运行的cron任务中:

清单 4. 维护LOG 和TMP 文件存储空间

$ find $LOGDIR -type d -mtime +0 -exec compress -r {} \;

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

第一个命令找到$LOGDIR 目录中所有包含在24 小时内(-mtime +0)进行了修改的数据的目录(-type d), 对它们进行压缩(这些目录超过了一个工作周(-mtime +5),第二个命令则将其删除(rm -f {}),以便增加磁盘上的可用空间。通过这种方对目录进行维护。

复制复杂的目录树

如果您想要将复杂的目录树从一台计算机复制到另一台计算机,同时保持副本权限以及User ID 和Group ID(UID 和GID——并且不复制用户文件,那么就需要再次使用find和cpio;

清单 5. 复制复杂的目录树

$ cd /source/directory

$ find . -depth -print | cpio -o -O /target/directory