zoukankan      html  css  js  c++  java
  • find与xargs

    1 find命令格式与基本参数
    find命令基本格式为: find pathname -options [-print -exec -ok]
    具体参数如下:
    pathname:查找路径
    -name:按照文档名称查找
    -perm:按照文档权限查找
    -prune:不在当前指定的路径查找。假如同时指定了-depth选项,则prune被忽略
    -user:按照文档属主查找
    -group:按照文档属组查找
    -mtime -n +n:按照文档更改时间查找。-n 指距离现在时间n天以内;+n n天以外
    -nogroup:查找无效属组文档
    -nouser:查找无效属主文档
    -newer file1 !file2:查找更改时间比file1新比file2旧的文档
    -type:查找某一类型文档
    b:块设备文档
    d:目录
    c:字符设备文档
    P:管道文档
    l:符号链接文档
    f:普通文档
    -size n[c]查找文档长度为n块的文档 有[c]表示文档长度以字节计
    -depth:查找时,首先查找当前目录文档,然后再在其子目录查找
    -fstype:查找位于某一类型文档系统中的文档,文档系统类型可在/etc/fstab中找到
    -mount:查找文档不跨越文档系统mount点
    -follow:如碰到链接文档,则跟踪至链接所指向文档
    -cpio:对匹配的文档使用cpio命令,将文档备份到磁带设备中
    -print:将匹配的文档输出到标准输出
    -exec:对匹配的文档执行所给的shell命令。形式为:command { } \;注意{ }和\;之间的空格
    -ok:和-exec作用相同。只但是以一种更安全的模式执行该参数所给的shell命令。在执行每个命令之前,都会给出提示,让用户确定是否执行
    以上命令参数不必要都掌握,只需掌握比较实用的,其他的用到时再查询也比较方便。
    2 find命令实用场景举例
    find / -name "[a-z]*" // 在根目录及其子目录下查找文件名以小写字母开头的文件,注意此处并不是正则表达式。
    find ./ -user barry // 在当前目录下查找文件属主是barry的文件
    find /barry -type d // 在barry目录下查找类型是目录的文件
    find /barry -mtime +5 // 在barry目录下查找文件最后更新时间在5天以前的文件
    find /barry -ctime -3 // 查找最后更新时间在3天以内的文件,注意此处是文件属性的更新时间,不是文件内容
    find /barry -size +5k //查找文件大小在5k以上的文件
    以上查找条件可以同时使用,用来查找同时满足多个条件的文件。
    find ./ -type f -exec rm {} \; // 对于查找到的符合条件的文件执行rm命令,注意{}与\之间的空格
    但是这样会有个问题,当查找到的文件非常多时,对每一个文件都执行rm命令,产生多个进程,资源消耗比较厉害。所以xargs就显得很聪明了,它并不产生多个进程。
    3 xargs命令
    xargs命令接收一块数据,这块数据是张参数列表,按照指定的分隔符,每个分段是一个参数。例如:
    find ./ -type f | xargs rm
    这样就对找到的每个文件执行rm命令,类似-exec的功能。
    不过,问题来了,当find找到的文件的路径中有空格时,xargs会把这个路径分成两段,每一段作为一个参数,可见默认xargs是以空格问分割依据的。
    如果让xargs和find命令以别的一个特殊的字符作为分隔符,这个问题不就解决了,这样xargs就不会误会find了。
    find命令可以用 -print0选项将find命令的输出以空字符'0'作为分隔符,也就是说路径之间是以空字符作为分隔符的。
    同理,xargs命令用 -0 来指定以空字符作为分隔符,从传递进来的数据中提取参数。如下:
    find ./ -type f -print0 | xargs -0 rm
    这样就和谐了。

  • 相关阅读:
    【Android Developers Training】 73. 布局变化的动画
    【Android Developers Training】 72. 缩放一个视图
    【Android Developers Training】 71. 显示翻牌动画
    svn更改地址怎么办
    python学习手册
    failed to bind pixmap to texture
    Ubuntu 12.04安装Google Chrome
    svn update 时总是提示 Password for '默认密钥' GNOME keyring: 输入密码
    重设SVN 的GNOME keyring [(null)] 的密码
    Nginx + uWSGI + web.py 搭建示例
  • 原文地址:https://www.cnblogs.com/barrychiao/p/2718777.html
Copyright © 2011-2022 走看看