zoukankan      html  css  js  c++  java
  • 我常用的find命令

    索引

    基础

    exec执行命令

    文件名或查找

    忽略文件

    用find查找以abc开头,但不包含“.”的文件的方法


    find . -name "*.c" 在当前目录及其子目录(用“.”表示)中查找任何扩展名为“c”的文件

    find . -name "*Iden*" -exec rm {} \;

     

    find ./  \( -iname "*.c" -or -iname "*.cc" \)   查找以.c或.cc结尾的文件  忽略大小写

    find -regex ".*\.\(xls\|csv\)"   查找以xls 或csv 结尾的文件

     find -name "*.xls" -o -name "*.csv"  同上

     

    find / -path /mnt -prune -o -regex ".*\.\(cc\|h\)"

    find / \( -path /dev -o -path /var -o -path /mnt \) -prune -o -name "*.cc"|wc -l


     

    用find查找以abc开头,但不包含“.”的文件的方法

    如下三种方法都可以:

    1.

    1. find . -name "abc*" ! -name "*.*" -print

    2.

    1. find . -regex '.*/abc[^.]*'

    3.

    1. find . -name "*.*" -o -name "abc*" -print

    第一种方法是最容易理解的了,第二个 -name前的 ! 号表示 -not, 与-not的意义是相同的,所以也可以写成:

    find . -name "abc*" -not -name "*.*" -print

    第二种方法: 因为用-name选项的时候,find不支持正则表达式,此时要使用 -regex选项

    正则式: '.*/abc[^.]*'

    .*/ 表示在当前目录及下及目录中找

    [^.]* 表示abc后匹配任意字符,除了.

    第三种方法看起来很难理解

    因为-o 是 or 的意思,也就是或

    猛的看起来好像是说找到所有含有. 或者以abc开头的

    其实不然

    这两个-name构成了这样形式的表达式

    Exp1 or Exp2

    如果Exp1 为真的话,就不会再判断Exp2

    如果Exp1为假,才执行Exp2,非常类似于C语言中的 " || " 符号

    所以,如果匹配到有.的文件名,则不会执行后面的了,所以-print此时不会打印

    今天也意外的发现了一点

    find [path...] [expression]

    在最后可以用 -exec command

    如下:

    find . -name "abc*" -exec ls {} /;

    以前一直不明白后面加个 {} /;是干什么的

    今天总算知道了

    其实{} 表示匹配到前面的文件

    所以,你也可以这样用:

    find . -name "abc*" -exec mv {} {}.old /;

    此时所完成的功能就是:

    将所有以abc开关的文件,全部在后面加上 .old 后缀

     

    2  

  • 相关阅读:
    模态对话框可能导致程序崩溃
    C++实现将字符串循环左移n个位置
    Android Gallery图片显示和文字提示及Menu 菜单
    android代码实现ScaleAnimation
    Android系统内存管理的问题
    android打电话发短信
    android开发之屏幕设置
    输入法
    黄金周
    气筒
  • 原文地址:https://www.cnblogs.com/wangkangluo1/p/2144383.html
Copyright © 2011-2022 走看看