目录

1.哪些是find指令

Linuxfind命令拿来在指定目录下查找文件。任何坐落参数之前的字符串都被辨识匹配查找的文件或则目录名。假如使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。而且将查找到的子目录和文件全部进行显示。

命令:find[path][expression]

path是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,倘若未指定路径,则默认为当前目录。

expression是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等。

代码如下(示例):

我们先随意创建一些文件和目录

[root@localhost opt]# touch {1..5}.txt
[root@localhost opt]# ls
1.txt  2.txt  3.txt  4.txt  5.txt
[root@localhost opt]# mkdir -p 11/22/33
[root@localhost opt]# ls
11  1.txt  2.txt  3.txt  4.txt  5.txt

命令:find

[root@localhost opt]# find
.
./1.txt
./2.txt
./3.txt
./4.txt
./5.txt
./11
./11/22
./11/22/33

我们看见现今所在目录下的所有文件目录和子目录文件全部显示下来

linux括号的使用_linux find命令 括号_命令括号怎么打

这儿是find前面不输入任何命令和参数的作用

作用就是查找目前所在目录下的所有文件目录(包括子目录和文件)

2.find拓展命令

我们里面讲到了,find旁边是可以跟着系统命令进行组合使用,前面配合不同的命令也会有不同的疗效,在日常工作学习中,这种都是我们运维人员必须把握而且熟悉运用的命令。

-name按照文件目录名称去进行匹配查找,准许使用?和*键值进行匹配查找linux find命令 括号,记得前面输入类似于”?.txt”的文件名时,一定要用双冒号或单冒号。

代码如下(示例):

[root@localhost opt]# find -name '?.txt'
./1.txt
./2.txt
./3.txt
./4.txt
./5.txt

这时便将单字符开头的txt后缀文件全部筛选了下来

注意事项:前面可以跟文件全名,此时双冒号和单冒号可有可无

假如是跟键值去匹配文件,一定要加上双冒号或则单冒号进行匹配

-size依据目标文件大小进行查找,前面可跟+或则-,符号分别代表,小于,大于等于,假如大小后面没有+也没有-则代表等于,前面显存抒发分别有“k”“M”“G”“c”,常常用到的分别是“k”“M”“G”

代码如下(示例):

[root@localhost opt]# find -size -5M
.
./1.txt
./2.txt
./3.txt
./4.txt
./5.txt
./11
./11/22
./11/22/33

我们看见所有文件和目录包括子目录和文件都被查找了下来

注意事项:前面的显存代表,一定要分辨大小写,不然一定会报错。

-user依据目标文件是否属于目标用户进行查找

[root@localhost opt]# find -user root
.
./1.txt
./2.txt
./3.txt
./4.txt
./5.txt
./11
./11/22
./11/22/33

我们看见那些文件同时被筛选了下来,由于这种都此用户下的文件和目录。

这个在正常的工作中并不常用linux find命令 括号,在这就不进行太详尽的演示了

-type依据目标文件类型进行查找,f代表正常普通文件,d代表目录,l代表符号联接文件

代码如下(示例):

[root@localhost opt]# find -type d
.
./11
./11/22
./11/22/33
[root@localhost opt]# find -type f
./1.txt
./2.txt
./3.txt
./4.txt
./5.txt

我们看见查找目录时,包括其目录下的子目录子文件就会被筛选下来

注意事项:-type旁边跟的文件类型不须要加-和/类的符号

3.组合拓展命令

find-namexxx-a-typef

查找某个名称的文件而且是普通文件

find-namexxx-o-typef

查找某个名称的文件或是普通的文件

中间的-a也可以换成-o,然而结果大不一样

linux find命令 括号_命令括号怎么打_linux括号的使用

-a代表and,前后两个条件都须要满足

-o代表or,前后两个条件满足一个即可

代码如下(示例):

[root@localhost opt]# ls -i
  1840028 11     101394029 2      103100994 3.txt  103100996 5.txt
101394029 1.txt  101394030 2.txt  103100995 4.txt
[root@localhost opt]# find -name '?.txt' -a -type f
./1.txt
./2.txt
./3.txt
./4.txt
./5.txt
./11/1.txt

我们看见这时既满足txt后椎的文件又满足普通文件条件的文件都被筛选了下来,并且没有后缀的硬链接文件并没有被筛选下来,由于此文件并没有后缀txt,虽然文件在目录里,也会被筛选下来,此目录下的所有文件就会被展示下来。

[root@localhost opt]# ls -i
  1840028 11     101394029 2      103100994 3.txt  103100996 5.txt
101394029 1.txt  101394030 2.txt  103100995 4.txt
[root@localhost opt]# find -name '?.txt' -o -type f
./1.txt
./2.txt
./3.txt
./4.txt
./5.txt
./11/1.txt
./2

我们能看见linux关机命令,结果筛选下来的文件完全不一样,第二个我们看见之前创建的硬链接文件并不属于后面的txt后缀文件百度网盘LINUX,并且属于前面的普通文件,满足了其中一个条件才会被筛选下来

同理,把-name-type-size-user四种结合互相使用也是可以精准查找相匹配的文件,而且一定要注意中间的-a和-o的使用。

接出来是另外一种拓展命令的使用方式

命令:-exec系统命令{};

这个命令须要与find和拓展指令结合使用,是指无需用户确认,强制执行前面的系统命令,大括弧代表的是上面命令的结果当作前面exec的参数

命令:find-name‘?.txt’-execrm-rf{};

代码如下(示例):

[root@localhost opt]# ls
11  1.txt  2  2.txt  3.txt  4.txt  5.txt
[root@localhost opt]# find -name '?.txt' -exec rm -rf {} ;
[root@localhost opt]# ls
11  2

rm-rf的命令是删掉,-exec上面的命令执行的结果,作为参数放在-exec的命令中的{}位置执行,这时我们看见后缀名称带txt的文件都被删掉掉了,结尾的;是这条命令的固定格式,必须以这个结尾

这时我们可以和之前结合的拓展find命令,再度结合使用,进行进一步详尽的筛选和操作

命令:find-name'?.txt'-a-typef-execrm-rf{};

查找名子带后缀txt的普通文件并把它删掉

代码如下(示例):

[root@localhost opt]# ls
11  1.txt  2.txt  3.txt  4.txt  5.txt
[root@localhost opt]# find -name '?.txt' -a -type f -exec rm -rf {} ;
[root@localhost opt]# ls
11

我们看见这时上面被find指令所筛选下来的文件,被-exec指令强制删掉了

只剩下一个11的目录,它既不是普通文件,也不是后缀带txt的文件,所以筛选不到

Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复