# Linux中常用的搜索文件指令
# 🐾grep指令
作用: 文件内容查询
常用格式如下:
grep [option] [file1,file2…..]
# 🧬举例使用
# 前提
现在我们在/root目录下建立一个文件,命名为my,内容为:
banana 2 10 15
apple 3 8 18
orange 3 7 12
apple 6 5 3
apple 3 8 18
watermelons 5 3 4
# 常用参数
- 在文件my中搜索出含有字符串apple的行
grep apple my
输出结果:
root@yuniee:~# grep apple my
apple 3 8 18
apple 6 5 3
apple 3 8 18
- option: -n 输出前加上行号
grep -n apple my
输出结果:
root@yuniee:~# grep -n apple my
2:apple 3 8 18
4:apple 6 5 3
5:apple 3 8 18
- -v 匹配在文件my中搜索出不含有字符串apple的行
grep -v apple my
输出结果:
root@yuniee:~# grep -v apple my
banana 2 10 15
orange 3 7 12
watermelons 5 3 4
- -c 只显示匹配行的数量
grep -c apple my
输出结果:
root@yuniee:~# grep -c apple my
3
- 在
ls -l
命令的运行结果中搜索出含有字符d的行
ls -l|grep d
我的计算机内/root路径下输入ls -l
原本内容如下:
root@yuniee:~# ls -l
total 416
-rw-r--r-- 1 root root 0 Aug 19 12:40 add
drwxr-xr-x 3 root root 4096 Jul 13 12:22 data
-rw-r--r-- 1 root root 108 Aug 19 11:57 my
-rwxr-xr-x 1 root root 22168 Jun 28 16:48 nezha.sh
drwx------ 3 root root 4096 Jul 15 06:26 snap
-rw-r--r-- 1 root root 294407 Jul 21 06:12 stable-8719.tar.gz
-rw-r--r-- 1 root root 2217 Sep 6 2018 swap.sh
-rwxr-xr-x 1 root root 89879 Jun 25 09:18 tcpx.sh
输出结果:
-rw-r--r-- 1 root root 0 Aug 19 12:40 add
drwxr-xr-x 3 root root 4096 Jul 13 12:22 data
drwx------ 3 root root 4096 Jul 15 06:26 snap
- 在ls –l命令的运行结果中出首字符是d的行
ls -l|grep ^d
输出结果:
root@yuniee:~# ls -l|grep ^d
drwxr-xr-x 3 root root 4096 Jul 13 12:22 data
drwx------ 3 root root 4096 Jul 15 06:26 snap
实际上搜索出的结果就是/root下ls列出的所有的d开头的结果,也就是/root下所有的目录
- 在ls –l命令的运行结果中搜索出首字符不是d的行
ls -l|grep -v ^d
输出结果:
root@yuniee:~# ls -l|grep -v ^d
total 416
-rw-r--r-- 1 root root 0 Aug 19 12:40 add
-rw-r--r-- 1 root root 108 Aug 19 11:57 my
-rwxr-xr-x 1 root root 22168 Jun 28 16:48 nezha.sh
-rw-r--r-- 1 root root 294407 Jul 21 06:12 stable-8719.tar.gz
-rw-r--r-- 1 root root 2217 Sep 6 2018 swap.sh
-rwxr-xr-x 1 root root 89879 Jun 25 09:18 tcpx.sh
实际上搜索出的结果就是/root下ls列出的所有的非d开头的结果,也就是/root下所有的文件
# 🪸find指令——文件查找
作用: 在指定的目录开始,递归的搜索其各个子目录,查找满足条件的文件并对之采取相关的操作。
常用格式如下:
find [option] [file]
注释:find命令提供的寻找条件可以是一个用逻辑运算符not、and、or组成的复合条件。and用-a表示,or用–o表示, not用!表示
# 🧠举例使用
我的/root下所有目录和文件如下:
root@yuniee:~# ls -l
total 424
-rw-r--r-- 1 root root 0 Aug 19 12:40 add
drwxr-xr-x 3 root root 4096 Jul 13 12:22 data
drwxr-xr-x 2 root root 4096 Aug 19 13:02 map.c
-rw-r--r-- 1 root root 108 Aug 19 11:57 my
-rwxr-xr-x 1 root root 22168 Jun 28 16:48 nezha.sh
drwx------ 3 root root 4096 Jul 15 06:26 snap
-rw-r--r-- 1 root root 294407 Jul 21 06:12 stable-8719.tar.gz
-rw-r--r-- 1 root root 2217 Sep 6 2018 swap.sh
-rwxr-xr-x 1 root root 89879 Jun 25 09:18 tcpx.sh
drwxr-xr-x 2 root root 4096 Aug 19 13:02 time.c
- 查找/root目录以下扩展名为c的文件
find /root -name '*.c'
输出结果:
root@yuniee:~# find /root -name '*.c'
/root/time.c
/root/map.c
- 查找/root目录以下扩展名为c或者以h开头的文件
find /root -name '*.c' -o -name 'h*'
输出结果:
root@yuniee:~# find /root -name '*.c' -o -name 'h*'
/root/time.c
/root/.acme.sh/http.header
/root/.acme.sh/deploy/haproxy.sh
/root/map.c
/root/.jitsi-meet-cfg/web/acme.sh/http.header
可以看到查找是递归的
- 查找/root目录以下扩展名不是c的文件
find /root ! -name '*.c'
(这个结果过多就不展示了🥹🥹,总之就是所有非*.c的文件或目录)
- 查找/root目录以下文件名以m开头的C文件,并显示文件内容
find /root -name 'm*.c' -ok more {} \;
以及
find /root -name 'm*.c' -exec more {} \;
这两个命令都是使用 find
命令来查找文件,并使用 more
命令逐个显示找到的文件内容。
①find /root -name 'm*.c' -ok more {} \;
- 这个命令会在目录
/root
下递归查找文件名以m
开头且以.c
结尾的文件。 - 对于每个找到的文件,命令会显示一个确认提示,询问是否执行后续的命令。
- 如果输入
y
或Y
,则会执行more
命令来逐个显示文件内容。 - 如果输入其他任何内容,命令将跳过该文件,继续查找下一个文件。
②find /root -name 'm*.c' -exec more {} \;
- 这个命令也会在根目录
/root
下递归查找文件名以m
开头且以.c
结尾的文件。 - 对于每个找到的文件,命令会立即执行
more
命令来逐个显示文件内容,无需确认提示。
这两个命令的区别在于 -ok
和 -exec
参数的使用。-ok
会在执行前询问用户确认,而 -exec
则直接执行命令。
所以我们常常用第二个
输出结果:
root@yuniee:~# find /root -name 'm*.c' -exec more {} \;
hello I'm map.c
- 查找/root目录以下扩展名为c的文件,并复制到/pro目录中
我在/root目录下,首先mkdir /root/pro
find /root -name '*.c' -ok cp {} /root/pro \;
输出结果:
root@yuniee:~# find /root -name '*.c' -ok cp {} /root/pro \;
< cp ... /root/time.c > ? y
cp: -r not specified; omitting directory '/root/time.c'
< cp ... /root/map.c > ? y
< cp ... /root/pro/map.c > ? y
cp: '/root/pro/map.c' and '/root/pro/map.c' are the same file
然后看看/root/pro下的文件
root@yuniee:~# ls /root/pro
map.c
# 🎏总结
虽然这都是初学者接触的最基础的命令,但日常使用中还是总是忘记使用他们,大家有空多复习一下啊😶🌫️