龙空技术网

Linux基础之find实例

travelsfar 232

前言:

今天各位老铁们对“apachehome目录在哪”大体比较看重,我们都想要剖析一些“apachehome目录在哪”的相关内容。那么小编也在网摘上收集了一些有关“apachehome目录在哪””的相关知识,希望大家能喜欢,姐妹们快快来了解一下吧!

Find语法格式:

find path -option [ -print ] [ -exec -ok command ] {} \;

解释:

Path: find命令所查找的目录路径

print:表示将结果输出到标准输出。

exec:对匹配的文件执行该参数所给出的shell命令。形式为command {} \;,注意{}与\;之间有空格

ok:与exec作用相同,区别在于,在执行命令之前,都会给出提示,让用户确认是否执行

Option:

一、-a与-o的困惑

实例:find /test -path "/test/aaa" -a -prune -o -print

解释:查询/test目录,但忽略/test 下得aaa子目录

我们知道,path指定了某个目录,使用prune则跳过该目录,不会对该目录下的子目录及文件进行查找。但这里-a 与-o比较困惑,您可以测试下:

find /test -path "/test/aaa" -a -prune -a -print

可能会更困惑,为什么返回值只有/test/aaa?不是说-prune会跳过/test/aaa目录?下面将详细谈谈。

本例find会对/test的所有目录(文件)执行一系列的条件约束,如 -path “/test/aaa” 就是一个条件约束,其作用是/test的每个目录(文件)逐个去匹配其路径是否与/test/aaa相同,若相同则返回true,否则返回false,当执行完这个约束后,会根据后面是-a还是-o来推进。

-a类似“逻辑AND”,若先前的条件约束返回false,则-a后续不会执行(遵循短路策略),若返回true,则-a后续会执行-prune,-prune会跳过这个目录(即忽略/test/aaa目录)。

也就是说当查询到/test/bbb这样的目录时,-path “/test/aaa”与其不匹配,返回false,因此-a -prune -a -print也就不会执行,只有恰好查询到/test/aaa目录时,-path “/test/aaa”与其匹配,返回true,这样-a -prune -a print才会执行,因此find /test -path "/test/aaa" -a -prune -a -print就只会显示/test/aaa。

-o类似“逻辑OR”,即便之前条件约束返回false,-o也会执行,因此print前应使用-o,这样所有不是/test/aaa目录(文件)都print出来。

注意:-a是可以省略的,默认逻辑。

二、常见的一些print操作实例

1.查询/home/apache目录中文件长度小于100字节的文件:

find /home/apache -size -100c -print

2.查找大于100M小于200M的文件,支持[k,M,G]

find ./ -size +100M -size -200M -print

3.查找大于10块的文件,默认1块=512字节

find ~ -size +10 -print

4.在除了a、b目录以外的目录下查找.sh后缀文件

find ./ \( -path './a' -o -path './b' \) -a -prune -o -name *.sh -print

注意:圆括号()表示表达式的结合。即指示 shell 不对后面的字符作特殊解释,而留给 find 命令去解释其意义。由于命令行不能直接使用圆括号,所以需要用反斜杠'\'进行转意(即'\'转意字符使命令行认识圆括号)。同时注意'\(','\)'两边都需空格。

5.在自己的根目录$HOME中查找文件名符合*.log的文件

find ~ -name "*.log" -print

6.查询开头字母为大写的文件:

find . -name "[A-Z]*" -print

7.查询开头字母是小写,最后是1到9加上.log结束的文件:

find . -name "[a-z]*[1-9].log" -print

8.查询权限是755的文件

find . -perm 755 -print

9.查询文件属主为root的文件:

find ~ -user root -print

10.查询属主帐户已经被删除的文件

find /home -nouser -print

11.查询更改时间在5日以内的文件:

find / -mtime -5 -print

12.查询更改时间在3日以前的文件:

find / -mtime +3 -print

13.查询更改时间比文件log_20210305新但比文件log_20210404旧的文件。!是逻辑非符号

find / -newer log_20210305 ! -newer log_20210404

14.只查询/etc路径下的所有目录

find /etc -type d -print

15.使用find命令时,可能希望先查询本级目录下的所有文件,然后再在其子目录中查找。使用depth选项即可。这样做的一个深层次原因:当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。

查找一个名为netconfig.log的文件。

find / -name "netconfig.log" -depth -print

16.在当前的文件系统中查找文件(不进入其他文件系统),使用mount

find . -name "*.log" -mount -print

三、常见的一些exec/ok操作实例

exec选项后面跟随着所要执行的命令或脚本,然后是{ }、空格、\;

{}花括号代表前面find查找出来的文件名,因此要注意{}使用的位置。

1.执行ls -l

find . -type f -exec ls -l {} \;

2.查找当前目录下,24小时内更改过的文件,并进行删除操作(删除没有提示,谨慎使用)

find . -type f -mtime -1 -exec rm {} \;

3.查找当前目录下的jpg文件,若24小时内曾更改过,则进行删除,-ok会在删除前会进行询问。

find . -name "*.jpg" -mtime -1 -ok rm {} \;

4.查找当前目录下,将jpg文件复制到/home/stt/jpg/目录中

find . -name “*.jpg” -exec copy -r {} /home/stt/jpg/ \;

标签: #apachehome目录在哪