从系统中检索文件

来源:互联网 发布:linux开发工程师 编辑:程序博客网 时间:2024/06/05 00:13

如果想找出具有某一个特征的文件,并且并不知道具体的目录,那么就用find命令。

find 命令会按照给定的条件在指定目录及其子目录中查找文件。其中检索条件包括通配符,大小,和修改日期等。

find directory [option][tests][actions]


-mount Don't descend directories on other file systems.所以说当你如果mount有其他文件系统时,并且知道它肯定在linux系统中的话,可以用这个命令,加快搜索速度。

下面是action的具体操作

-print:find命令将匹配的文件输出到标准输出。
-exec :find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为'command' {  } \;,注意{   }和\;之间的空格。
-ok   :和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

-exec 和 -ok 是嵌入式命令,必须以一个转义的分号结束。{}是一个特殊参数,它将被当前文件的完整路径取代


$ find . -name '*.c' -print    .表示当前目录,命令-name后面跟的如果是通配符的话,只要确保读入find时候是通配符就行。

$ find /home/ryu -newer myfile 在ryu目录或者其子目录中找出比myfile更新晚的文件

$ find /home/ryu -newer myfile -type f -exec ls -l {} \; 

$ sudo find / -mount -name python -type d

使用逻辑运算符,逻辑非!逻辑与-a 逻辑或-o,在使用逻辑表达式时组合前后用有经过转义的括号

$ find /etc \( ! -user root \)                        所有不属于root的文件

$ find / \( -type d -a -user ryu \)                   找出根目录中所有属于ryu的子目录

$ find / \( -name '*.c' -o -name a.out \) -atime +30 找出一个月来从未访问过的.c文件或者a.out文件


检索文本内容

grep -[inv] string file i忽略大小写,n列出行号,v列出不符合后面检索模式的文本行。 string是一个检索模式,它可以使字符串,短语,但是如果里面包含空格,标点符号,控制字符时一定要加引号。

$ grep smith /home/ryu/phonebooks

$ grep "smith William" /home/ryu/phonebooks 因为有空格所以一定要加引号

$ grep -v capital *                         在当前目录下的所有文件中找出不含capital的文本行


grep与正则表达式

^ 行首 $ 行尾 .任一个单字符  [...]字符集或字符范围中任一个  [^...]不属于字符集或字符范围中的任一个

如果指定了-E选项:*零个或多个同一字符 +一个或者多个同一字符 {n}必须匹配n次 {n,}必须匹配n次或n次以上 {n,m}匹配次数在n与m之间

$ grep '^T' /etc/passwd     找出所有已T开头的文本行

$ grep 't$' /etc/passwd     以t结尾的文本行

$ grep '^t$' /etc/passwd    只含字符t的文本行

$ grep -n '^$' /etc/passwd  找出所有空行,并且列出行号

$ grep -E a+ /etc/passwd

$ grep  -E [a-z] \{10} /etc/passwd 搜索只有10个字符长全部由小写组成的单词


注意点是*和+ 它们都是跟前面的那个字符构成正则表达式,如下

$ grep 'ooo*' /etc/test     表示的是包含两个或两个以上oo的所有文本,前面两个oo表示字符,而第三个o与*组合表示0个或多个o


检索元字符 ^ $ . ' ? " * !自身的话,需要通过转义字符

$ grep ^\! /etc/test        找出以!开头的文本行


排序

sort -[bdfimnru] -k key -t separate_char -o output 

b 忽略前置的空白字符 d 仅考虑字母数字和空格字符,按词典顺序排序 n 按字符串的数值而不是文字进行排序

r 按从大到小或反向字符顺序排序 k 关键字字段位置,或关键字字段的起止位置 文本行是从1开始的

t 除空格以外的其他字段间隔符 o 输出文件

综上你会发现排序都是字段进行处理的,既然是一个文本行,我们一般都是以空格为标志进行字段的划分。

$ ls -al /etc | sort -k5 -rn 是按照ls -l输出的第5列也就是文件大小进行从大到小的排序


原创粉丝点击