find命令

33 阅读4分钟

Linux文件及find.png

文件类型c 字节文件详细说明

ls 参数

   -i # 显示inode数
   -a # 显示隐藏文件
   -r # 逆序输出
   -t # 按时间输出
   -h # 人类可读
   -l # 详细信息

/dev/zero | /dev/null

 # 经常用来测试使用,生成大文件
root@linux [07:55:26] [~] 
-> # dd if=/dev/zero of=1.txt bs=10MB count=10  # 生成大文件的命令:

dd: 命令
if: input file 要读取/etc/zero
of: output file 输出到当前的1g.txt  
bs: 1次输出多大
count: 总共输出的次数          

/dev/null 黑洞,执行命令的结果被吸收
root@linux [11:22:24] [~] 
-> # ping -c1  www.baidaaaaaaaau.com &> /dev/null | echo $?
2
root@linux [11:22:49] [~] 
-> # ll 
total 0
drwxr-xr-x 3 root root 69 Jul 10 10:09 oldboy1
drwxr-xr-x 3 root root 69 Jul 10 10:09 oldboy2
drwxr-xr-x 3 root root 69 Jul 10 10:09 oldboy3
-rw-r--r-- 1 root root  0 Jul 10 10:07 oldboyedu3.txt
root@linux [11:23:02] [~] 
-> # ll &> /dev/null| echo $?
0

root@linux [11:21:38] [~] 
-> # ping -c1  www.baidu.com > /dev/null | echo $?
0

find命令详解

1.查询

(1)按照文件类型查找

(2)按照inode号查询

(3)按照深度等级查询

(4)按照文件大小查询

2.查询交给其他指令

xargs,exec,``,() cp mv rm ls

环境准备
root@linux [10:09:42] [~] 
-> # tree
.
├── oldboy1
│   ├── file
│   ├── file1.txt
│   ├── file2.txt
│   └── file3.txt
├── oldboy2
│   ├── file
│   ├── file1.txt
│   ├── file2.txt
│   └── file3.txt
├── oldboy3
│   ├── file
│   ├── file1.txt
│   ├── file2.txt
│   └── file3.txt
├── oldboyedu1.txt
├── oldboyedu2.txt
└── oldboyedu3.txt

-exec<执行指令>:假设find指令的回传值为True,就执行该指令
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
-maxdepth<目录层级>:设置最大目录层级;
-mindepth<目录层级>:设置最小目录层级;
-type<文件类型>:只寻找符合指定的文件类型的文件;

(1)按照文件类型查找

root@linux [10:11:56] [~]                # 查找当前目录及当前目录子目录中的所有文件,除去隐藏文件
-> # find . -type f | grep -v '^\./\.'
./oldboy1/file1.txt
./oldboy1/file2.txt
./oldboy1/file3.txt
./oldboy3/file1.txt
./oldboy3/file2.txt
./oldboy3/file3.txt
./oldboyedu2.txt
./oldboyedu1.txt
./oldboy2/file1.txt
./oldboy2/file2.txt
./oldboy2/file3.txt
./oldboyedu3.txt

root@linux [10:12:14] [~]               # 查找当前目录及当前目录子目录
-> # find . -type d | grep -v '^\./\.' 
.
./oldboy1
./oldboy1/file
./oldboy3
./oldboy3/file
./oldboy2
./oldboy2/file

 
root@linux [10:13:27] [~]               # 查找当前目录下及子目录下以fil开头的所有文件
-> # find . -type f -name "fil*"
./oldboy1/file1.txt
./oldboy1/file2.txt
./oldboy1/file3.txt
./oldboy3/file1.txt
./oldboy3/file2.txt
./oldboy3/file3.txt
./oldboy2/file1.txt
./oldboy2/file2.txt
./oldboy2/file3.txt


root@linux [10:14:23] [~]             # 查找当前目录及子目录下以old开头的目录
-> # find . -type d -name "old*" 
./oldboy1
./oldboy3
./oldboy2

root@linux [10:16:39] [~]             # 查找当前目录及子目录下以old开头的文件和目录
-> # find . -name "oldboy*"
./oldboy1
./oldboy3
./oldboyedu2.txt
./oldboyedu1.txt
./oldboy2
./oldboyedu3.txt

(2)按照inode号查询

root@linux [10:34:14] [~] 
-> # ls -il
total 0
 1308658 drwxr-xr-x 3 root root 69 Jul 10 10:09 oldboy1
34514898 drwxr-xr-x 3 root root 69 Jul 10 10:09 oldboy2
67161033 drwxr-xr-x 3 root root 69 Jul 10 10:09 oldboy3
67161047 -rw-r--r-- 1 root root  0 Jul 10 10:07 oldboyedu1.txt
67161326 -rw-r--r-- 1 root root  0 Jul 10 10:07 oldboyedu2.txt
67161327 -rw-r--r-- 1 root root  0 Jul 10 10:07 oldboyedu3.txt

root@linux [10:34:45] [~] 
-> # find . -inum "1308658"
./oldboy1

(3)按照深度等级查询 -maxdepth x

root@linux [10:36:50] [~] 
-> # find . -maxdepth 1 -type f | grep -v '\./\.'
./oldboyedu2.txt
./oldboyedu1.txt
./oldboyedu3.txt

(4)按照文件大小查询

root@linux [10:41:08] [~]  +|-| x k|m|g 
-> # find . -size 0b -type f | grep -v '\./\.' 
./oldboy1/file1.txt
./oldboy1/file2.txt
./oldboy1/file3.txt
./oldboy3/file1.txt
./oldboy3/file2.txt
./oldboy3/file3.txt
./oldboyedu2.txt
./oldboyedu1.txt
./oldboy2/file1.txt
./oldboy2/file2.txt
./oldboy2/file3.txt
./oldboyedu3.txt

(5)查看目录总大小

root@linux [10:42:54] [~] 
-> # du -sh . 
23M	.
root@linux [10:43:15] [~] 
-> # du -sh oldboy1 
0	oldboy1

2. 查询之后转交其他指令

方法一 xargs

cp 复制

root@linux [10:53:45] [~] 
-> # find . -name "oldboyedu1.txt" | xargs -i cp {} /tmp 

mv 移动 

root@linux [11:00:53] [~] 
-> # find . -name "oldboyedu1.txt" | xargs -i mv {} /opt
root@linux [11:01:58] [~] 
-> # ls /opt
oldboyedu1.txt
root@linux [11:02:02] [~] 
-> # ls 
oldboy1  oldboy2  oldboy3  oldboyedu2.txt  oldboyedu3.txt

rm 删除

root@linux [11:03:07] [~] 
-> # find /opt -name "oldboyedu1.txt" |  xargs rm -f  
root@linux [11:03:14] [~] 
-> # ls /opt

方法二,exec

ls -li
root@linux [11:09:02] [~] 
-> # find . -name "1.txt" -exec ls -l {} \;
-rw-r--r-- 1 root root 10 Jul 10 11:08 ./1.txt
root@linux [11:10:05] [~] 
-> # find . -name "1.txt" -exec ls -il {} \;
67161037 -rw-r--r-- 1 root root 10 Jul 10 11:08 ./1.txt

cat 查看

root@linux [11:08:45] [~] 
-> # find . -name "1.txt" -exec cat {} \;      
hahahahah

cp 复制

root@linux [11:07:24] [~] 
-> # find . -name "oldboyedu2.txt" -exec cp {} /opt \; 
root@linux [11:07:30] [~] 
-> # ls /opt
oldboyedu2.txt

mv 移动

root@linux [11:10:45] [~] 
-> # find . -name "oldboyedu2.txt" -exec mv {} /opt \;
root@linux [11:11:27] [~] 
-> # ls /opt
oldboyedu2.txt
root@linux [11:11:36] [~] 
-> # ls 
1.txt  oldboy1  oldboy2  oldboy3  oldboyedu3.txt

rm 删除

root@linux [11:11:38] [~] 
-> # find /opt -name "oldboyedu2.txt" -exec rm {} \;      
root@linux [11:12:22] [~] 
-> # ls /opt

方法三 `` 和 ()

ll 详细信息

root@linux [11:13:27] [~] 
-> # ll `find . -name "1.txt"`
-rw-r--r-- 1 root root 10 Jul 10 11:08 ./1.txt

cp 复制

root@linux [11:13:45] [~] 
-> # cp  `find . -name "1.txt"` /opt
root@linux [11:14:25] [~] 
-> # ls /opt
1.txt

mv 移动

root@linux [11:15:07] [~] 
-> # mv  `find . -name "1.txt"` /opt 
root@linux [11:15:13] [~] 
-> # ls /opt .
.:
oldboy1  oldboy2  oldboy3  oldboyedu3.txt

/opt:
1.txt

rm 删除

root@linux [11:15:20] [~] 
-> # rm  `find /opt -name "1.txt"`      
root@linux [11:15:54] [~] 
-> # ls /opt .
.:
oldboy1  oldboy2  oldboy3  oldboyedu3.txt

/opt: