`

linux_cmd_find

 
阅读更多

1、find命令

find命令是一个无处不在命令,是linux中最有用的命令之一。find命令用于:在一个目录(及子目录)中搜索文件,你可以指定一些匹配条件,如按文件名、文件类型、用户甚至是时间戳查找文件。下面就通过实例来体验下find命令的强大。

1.1、find命令的一般形式

man文档中给出的find命令的一般形式为:

find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

其实[-H] [-L] [-P] [-D debugopts] [-Olevel]这几个选项并不常用(至少在我的日常工作中,没有用到过),上面的find命令的常用形式可以简化为:

find [path...] [expression]

  • path:find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录
  • expression:expression可以分为——“-options [-print -exec -ok ...]”
    • -options,指定find命令的常用选项,下节详细介绍
    • -print,find命令将匹配的文件输出到标准输出
    • -exec,find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {  } \;,注意{   }和\;之间的空格 
      find ./ -size 0 -exec rm {} \; 删除文件大小为零的文件 (还可以以这样做:rm -i `find ./ -size 0`  或 find ./ -size 0 | xargs rm -f &) 
      为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中:find . -type f -exec ls -l {  } \; 
      在/logs目录中查找更改时间在5日以前的文件并删除它们:find /logs -type f -mtime +5 -exec rm {  } \;
    • -ok,和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。 
      find . -name "*.conf"  -mtime +5 -ok rm {  } \; 在当前目录中查找所有文件名以.LOG结尾、更改时间在5日以上的文件,并删除它们,只不过在删除之前先给出提示

也有人这样总结find命令的结构:

find start_directory
      options
      criteria_to_match
      action_to_perform_on_results

1.2、find命令的常用选项及实例

  • -name 
    按照文件名查找文件。 
    find /dir -name filename  在/dir目录及其子目录下面查找名字为filename的文件 
    find . -name "*.c" 在当前目录及其子目录(用“.”表示)中查找任何扩展名为“c”的文件
  • -perm 
    按照文件权限来查找文件。 
    find . -perm 755 –print 在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件
  • -prune 
    使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用-depth选项,那么-prune将被find命令忽略。 
    find /apps -path "/apps/bin" -prune -o –print 在/apps目录下查找文件,但不希望在/apps/bin目录下查找 
    find /usr/sam -path "/usr/sam/dir1" -prune -o –print 在/usr/sam目录下查找不在dir1子目录之内的所有文件
  • -user 
    按照文件属主来查找文件。 
    find ~ -user sam –print 在$HOME目录中查找文件属主为sam的文件
  • -group 
    按照文件所属的组来查找文件。 
    find /apps -group gem –print 在/apps目录下查找属于gem用户组的文件 
  • -mtime -n +n 
    按照文件的更改时间来查找文件, - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前。 
    find / -mtime -5 –print 在系统根目录下查找更改时间在5日以内的文件 
    find /var/adm -mtime +3 –print 在/var/adm目录下查找更改时间在3日以前的文件
  • -nogroup 
    查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。 
    find / –nogroup -print
  • -nouser 
    查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。 
    find /home -nouser –print
  • -newer file1 ! file2 
    查找更改时间比文件file1新但比文件file2旧的文件。
  • -type 
    查找某一类型的文件,诸如: 
    b - 块设备文件。 
    d - 目录。 
    c - 字符设备文件。 
    p - 管道文件。 
    l - 符号链接文件。 
    f - 普通文件。 
    find /etc -type d –print 在/etc目录下查找所有的目录 
    find . ! -type d –print 在当前目录下查找除目录以外的所有类型的文件 
    find /etc -type l –print 在/etc目录下查找所有的符号链接文件
  • -size n:[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。 
    find . -size +1000000c –print 在当前目录下查找文件长度大于1 M字节的文件 
    find /home/apache -size 100c –print 在/home/apache目录下查找文件长度恰好为100字节的文件 
    find . -size +10 –print 在当前目录下查找长度超过10块的文件(一块等于512字节)
  • -depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。 
    find / -name "CON.FILE" -depth –print 它将首先匹配所有的文件然后再进入子目录中查找 
  • -mount:在查找文件时不跨越文件系统mount点。  
    find . -name "*.XC" -mount –print 从当前目录开始查找位于本文件系统中文件名以XC结尾的文件(不进入其他文件系统)
  • -follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。

1.3、find与xargs

在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。

find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;

而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。

来看看xargs命令是如何同find命令一起使用的,并给出一些例子。

find . -type f -print | xargs file 查找系统中的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件

find / -name "core" -print | xargs echo "" >/tmp/core.log 在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中:

find . -type f -print | xargs grep "hostname" 用grep命令在所有的普通文件中搜索hostname这个词

find ./ -mtime +3 -print|xargs rm -f –r 删除3天以前的所有东西 (find . -ctime +3 -exec rm -rf {} \;)

find ./ -size 0 | xargs rm -f & 删除文件大小为零的文件

find命令配合使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令。

 

 

1.4、Examples

ref: 

http://mikzhang.iteye.com/blog/1976059 35 Practical Examples of Linux Find Command

结合grep 让find 更强大

http://mikzhang.iteye.com/blog/197748312 Practical Examples of Linux grep Command (参考1,2,3)

分享到:
评论

相关推荐

    linux_cmd.txt

    - **find . -name 'my*'**:在当前目录下查找以“my”开头的文件。 - **grep "my*" file1 file2**:在文件file1和file2中搜索包含“my”的行。 #### 三、显示当前路径和创建目录 - **pwd**:显示当前工作目录。 - ...

    linux_cmd_doc.zip_doc

    这份"linux_cmd_doc.zip_doc"中的“linux命令手册.pdf”详细记录了Linux系统中常用的各种命令,包括它们的格式、参数以及使用场景。这篇文档将深入探讨这些知识点,帮助你更好地理解和运用Linux命令。 一、Linux...

    1.linux-cmd_命令_linux_

    本文将详细解析"Linux-cmd_命令_linux_"这一主题,涵盖Linux命令行的基本操作、目录和文件管理、文件属性以及查找和检索技术。 1. **Linux命令行基础** - **Shell**:Linux的命令行界面被称为Shell,它是用户与...

    linux+cmd命令全集

    在IT领域,操作系统是计算机系统的核心,而Linux和Windows CMD(命令提示符)则是两种广泛使用的操作系统接口。这里我们聚焦于"Linux+CMD命令全集",这些CHM(Microsoft帮助文件)文档提供了丰富的命令参考。 Linux...

    ubuntu_cmd.rar_ls_ls -a cmd_文件管理

    在实际操作中,`ls`命令的使用往往与其它命令结合,例如,配合`grep`搜索特定的文件名,或者与`find`命令一起查找满足特定条件的文件。理解并掌握这些基本的命令行工具,对于提升Linux系统的使用效率至关重要。 在...

    linux_command_tools

    “Linux Command Tools”可能包含一系列模拟Linux命令的脚本或程序,如`ls`, `cd`, `mkdir`, `rm`, `cp`, `mv`, `grep`, `find`, `sed`, `awk`等,这些都是Linux系统中最常用的命令。通过这个工具,用户可以执行文件...

    Windows_CMD命令大全-电脑教程.zip

    "dir"是Windows中的命令,而"ls"在Linux和Mac OS中更为常见,但在Windows的PowerShell中也可以使用。 2. **cd** / **chdir**: 用于切换当前工作目录,帮助用户在文件系统中导航。 3. **md** / **mkdir**: 创建新的...

    linux全志R16的linux系统编译的资料_20170502_1655.7z

    全志R16平台编译linux系统V1.0.txt 2017/4/11 13:36 (编译请使用编译android的lichee的选项编译生成的.config文件,不然直接编译会报错!!!!) rootroot@cm-System-Product-Name:/home/wwt/linux_r16$ tar...

    8-07-14_MegaCLI for linux_windows

    SCGCQ00353584 Defect CLI has to refresh the MR_CTRL_INFO after the MR_DCMD_CTRL_FLASH_FW_DOWNLOAD for OFU. SCGCQ00356037 Defect CLI Crashes When Running ADP FW Flash Command SCGCQ00356190 Defect No ...

    [电脑教程]CMD + DOS + Linux +( Linux vs. DOS )常用指令大全.doc

    在计算机操作系统中,CMD、DOS和Linux都是与命令行接口相关的概念。CMD和DOS主要指的是Windows操作系统中的命令提示符,而Linux则是一个基于Unix的开源操作系统。这些系统都提供了通过命令行来执行操作和管理系统的...

    linux和cmd 指令chm文档,内含3个linux的,1个windows dos的文档

    Linux和Windows CMD是两种不同的操作系统中的命令行工具,它们提供了命令行界面来执行系统操作、管理文件、控制进程以及执行各种任务。这份压缩包文件包含了关于Linux和Windows DOS的指令CHM文档,这些文档通常以...

    ap6212a0_a33_sc3817r_服务器验证通过_bt已经通了_wifi需要修改配置_需要再次验证_20170626_1549.7z

    # $(call find-copy-subdir-files,*,device/softwinner/polaris-common/rild/usb_modeswitch.d,system/etc/usb_modeswitch.d) PRODUCT_PROPERTY_OVERRIDES += \ ro.sw.embeded.telephony = false PRODUCT_...

    Linux+Sql命令

    10. **find**:在文件系统中查找文件。 11. **sudo**:以管理员权限执行命令。 12. **apt-get/yum**:软件包管理器,用于安装、更新和卸载软件。 了解这些基本命令后,你可以进行更复杂的操作,如编写脚本、管理...

    cmd操作命令和linux命令大全收集

    CMD命令:开始->运行->键入cmd或command(在命令行里可以看到系统版本、文件系统版本) 命令大全 1. gpedit.msc-----组策略 2. sndrec32-------录音机 3. Nslookup-------IP地址侦测器 ,是一个 监测网络中 DNS...

    pm2-linux离线安装包可解压后直接上传项目node-modules文件夹下面

    标题中的“pm2-linux离线安装包”是指用于Linux系统的PM2管理工具的离线版本。PM2是一个流行的Node.js进程管理器,它允许开发者在Linux服务器上部署、管理和保持Node.js应用程序。这个离线安装包是专为那些无法或...

    LINUX CMD

    "LINUX CMD"这个主题意味着我们将深入探讨Linux的命令行界面(CLI)及其相关命令,这对于任何想要提升系统管理技能或者进行软件开发的人来说都是必不可少的。"UNIX命令"标签进一步提示我们,这些知识同样适用于与...

    hostapd-2.10源码

    Hostapd是一个开源软件,主要用于在Linux系统上创建和管理无线接入点(WIFI热点)。这个软件让个人计算机或路由器可以成为一个WIFI热点,允许其他设备通过无线方式连接并访问网络。版本2.10是Hostapd的一个稳定版本...

    8192CU LINUX驱动

    #define CONFIG_FIND_BEST_CHANNEL 1 #endif #define CONFIG_SKB_COPY 1//for amsdu #define CONFIG_LED #ifdef CONFIG_LED #define CONFIG_SW_LED #ifdef CONFIG_SW_LED //#define CONFIG_LED_HANDLED_BY_CMD...

    windows下Linux命令行小工具

    通过解压这个文件,并将解压后的目录(例如`/wbin`)添加到系统的环境变量Path中,用户无需离开Windows的命令提示符(CMD)或使用PowerShell,就能直接执行Linux命令。 描述中提到的操作步骤非常重要,因为它们确保...

Global site tag (gtag.js) - Google Analytics