find 查找

语法模板

  • <指定目录>,指定目录及其子目录
  • <指定条件>,搜索文件的特征
  • -exec + <指定动作>, 对搜索结果进行特定的处理
  • -maxdepth , 递归深度:

    • 默认情况下,会以递归的形式查找该文件夹下所有的文件。
    • maxdepth=0,只显示目录本身。也就是一个 .
    • maxdepth=1, 显示当前文件夹下所有的文件。
      1. find <指定目录> <指定条件> -exec <指定动作>

      用通配符匹配

  • 将所有文件名中含有”txt”的文件移入/home/user目录:

    1. find -iname "*txt*" -exec mv -v {} /home/user \;
  • 找出文件名结尾有空格的文件:

    1. find . -type f -exec egrep -l " +$" {} \;
  • 找出文件名有tab缩进符的文件

    1. find . -type f -exec egrep -l $'\t' {} \;
  • 查找guest用户的以avi或者rm结尾的文件并删除掉

  1. find . -name ''*.avi'' -o -name ''*.rm'' -user ''guest'' -exec rm {} \;
  • 查找的不以java和xml结尾,并7天没有使用的文件删除掉
  1. find . ! -name *.java ! -name ‘*.xml -atime +7 -exec rm {} \;

按文件大小查找

  • 文件大小

    1. find 位置 -type f -size 文件大小(800M
  • 找出/home/user下所有空子目录:

  1. find /home/user -maxdepth 1 -type d -empty

按时间范围查找

  • 将当前目录下最近30天访问过的文件移动到上级back目录
  1. find . -type f -atime -30 -exec mv {} ../back \;
  • 将当前目录下最近2小时到8小时之内的文件显示出来
  1. find . -mmin +120 -mmin -480 -exec more {} \;
  • 删除修改时间在30天之前的所有文件
  1. find . -type f -mtime +30 -mtime -3600 -exec rm {} \;
  • 查找过去10分钟内的更新的文件

    1. // 如果不加 -type f,则会查找普通文件、特殊文件、目录
    2. find . -type f -mmin -10
  • newermt 列出当前文件夹下 2019-02-26 11:38 之后的文件

    1. find . -newermt '2019-02-26 11:38'-maxdepth 1
  • 列出当前文件夹下 2019-02-26 11:38 到 2019-02-26 12:00 的文件

    1. find . -newermt '2019-02-26 11:38'! '2019-02-26 12:00' -maxdepth 1
  • 过去五分钟内以 zip 结尾的文件移动到 iBook 目录.

  1. find . -name '*.zip' -mmin -5|xargs -n1 -I {} cp {} ~/iBooks/temp/

grep 查找

grep

  • -l, 列出文件中文件名称.
  • r, 递归列出
    1. grep -lr "makeValidLength" ./
    2. // 列出当前文件夹下包含 "makeValidLength" 所有文件名

whereis 查找 binary 文件

专门用于查找可执行文件的命令是 which, 它会查找 $PATH 路径下的可执行文件。
whereis 可以用来查找文件,当然也就包括二进制文件了。
-b : 只找二进制文件
-m: 只找在说明文件manual路径下的文件
-s : 只找source源文件
-u : 没有说明文档的文件

  1. whereis python/mongod

ps 查找进程

选出 Python 进程并进入 Python shell

  1. a=$(ps aux|grep python|grep -v grep|head -1|awk '{print $11}')
  2. $a

替换

替换文件夹内所有文件的内容

sed 可以编辑文件
对文件夹里的内容进行查找替换 :

  1. grep -lr "makeValidLength" ./|xargs -n1 sed -i 's/makeValidLength/isValidLength/g'

替换单个文件

sed, 流式编辑器,能够过滤和转化文本

  1. sed /s/regexp/replacement/ xxx.file, 匹配 regexp 文本,并使用 replacement 替换,只替换第一个
  2. sed /s/regexp/replacement/g xxx.file, xxx.file 进行全局替换

替换字符串

替换字符串中的空白符

  1. w = `echo someText | sed 's/\s/_/g'`
  2. mv someText w

sed ‘s/\s/_/g’ 是定义的函数,`` 反引号是 echo 打印出的值。

把反斜杠替换成斜杠

  • s后面的第一个符号被认定为分割符

    1. # 这么写会一直抛异常,原因是 sed 后面的表达式没有闭合
    2. w = `echo 'C:\foo\bar.xml' | sed 's#\\#/'`
    3. # 需要一个分隔符告诉sed 表达式写完了
    4. w = `echo 'C:\foo\bar.xml' | sed 's#\\#/#'`
  • /g 的作用是全局替换
    但是上面写的有一个问题,打印出来是这样的

    1. C:/foo\bar.xml

    所以这个表达式的结尾还需要加一个/g,表示是全局替换:
    又因为之前已经把分隔符指定为 #, 所以添加 #g

    1. w = `echo 'C:\foo\bar.xml' | sed 's#\\#/#g#'`