28_find

发布时间 2023-10-21 00:56:46作者: 鸟叔书
1.find 常用指令
[root@kvm ~]# ls
ckh  createVM.sh
[root@kvm ~]# ls ckh/
1.txt  2.txt  demo.txt  DEMO.txt
[root@kvm ~]#
[root@kvm ~]# find / -name 1.txt
/root/ckh/1.txt
[root@kvm ~]#
[root@kvm ~]# find / -name demo.txt
find: ‘/proc/41335’: No such file or directory
/root/ckh/demo.txt
[root@kvm ~]#
[root@kvm ~]# find /root/ckh -iname demo.txt  # 以名称查找文件,不区分大小写
/root/ckh/demo.txt
/root/ckh/DEMO.txt
[root@kvm ~]# ls
ckh  createVM.sh
[root@kvm ~]# ls ckh/
1.txt  2.txt  demo.txt  DEMO.txt
[root@kvm ~]#
[root@kvm ~]# find /root/ckh -type f # 搜索文件
/root/ckh/2.txt
/root/ckh/1.txt
/root/ckh/demo.txt
/root/ckh/DEMO.txt
[root@kvm ~]#
[root@kvm ~]# cd ckh/
[root@kvm ckh]# ls
1.txt  2.txt  demo.txt  DEMO.txt
[root@kvm ckh]#
[root@kvm ckh]# ln -s demo.txt demo1.txt # 创建一个软连接 s soft 柔软,h hard 硬的
[root@kvm ckh]#
[root@kvm ckh]# ls -l
total 16
-rw-r--r-- 1 root root 73 Oct 20 22:54 1.txt
-rw-r--r-- 1 root root  6 Oct 20 22:34 2.txt
lrwxrwxrwx 1 root root  8 Oct 20 23:28 demo1.txt -> demo.txt
-rw-r--r-- 1 root root  4 Oct 20 23:25 demo.txt
-rw-r--r-- 1 root root  4 Oct 20 23:25 DEMO.txt
[root@kvm ckh]#
[root@kvm ckh]#
[root@kvm ckh]# cat demo1.txt
111
[root@kvm ckh]#
[root@kvm ckh]# find /root/ckh -type l   # 搜索类型为链接的文件
/root/ckh/demo1.txt
[root@kvm ckh]#
[root@kvm ckh]# unlink demo1.txt         # 取消软连接
[root@kvm ckh]# ls
1.txt  2.txt  demo.txt  DEMO.txt

# -size +1M     指定文件大小
# -empty        搜索空目录
# -maxdepth 3   搜索目录的深度



# find 到并且操作该文件
[root@kvm ckh]# find . -type f -name "demo.*"
./demo.txt
[root@kvm ckh]# find . -type f -name "demo.*" -exec mv {} aaa.txt \;
[root@kvm ckh]# ls
1.txt  2.txt  aaa.txt  DEMO.txt
[root@kvm ckh]# find . -size +2G -exec rm -rf {} \;


# 根据创建时间
# atime 访问时间 = cat 之后就会改变
# mtime 它代表着最近一次文件内容被修改的时间
# ctime 它代表着最近一次文件状态改变的时间 ,是status change time,
#       是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改,
#       即文件状态最后一次被改变的时间
# -mtime n : n为数字,意思为在n天之前的“一天之内”被更改过内容的文件
# -mtime +n : 列出在n天之前(不含n天本身)被更改过内容的文件名
# -mtime -n : 列出在n天之内(含n天本身)被更改过内容的文件名

# 以“分钟”为单位:(用法同上面的以“天”为单位)
# -amin
# -mmin
# -cmin

[root@kvm ckh]# ls
1.txt  2.txt  aaa.txt  DEMO.txt
[root@kvm ckh]#
[root@kvm ckh]# stat 1.txt
  File: 1.txt
  Size: 73              Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d      Inode: 83886213    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-10-20 22:54:15.005160031 +0800
Modify: 2023-10-20 22:54:12.316113656 +0800
Change: 2023-10-20 22:54:12.317113673 +0800
 Birth: 2023-10-20 22:54:12.315113639 +0800
[root@kvm ckh]#
[root@kvm ckh]# find ./ -mtime -1
./
./2.txt
./1.txt
./DEMO.txt
./aaa.txt


# 使用逻辑运算符和正则
# 与:-a,两个之间不加-a也默认为-a
# 或:-o
# 非:-not   或者[!]  = grep -v 不包含
# 德·摩根定律:
#             !A -a !B = !(A -o B)
#             !A -o !B = !(A -a B)


[root@kvm ckh]# find /root/ckh \( -name "*.txt" -o -name "*.doc" \)
/root/ckh/2.txt
/root/ckh/1.txt
/root/ckh/DEMO.txt
/root/ckh/aaa.txt
[root@kvm ckh]#
[root@kvm ckh]# find /root/ckh \( -name "?.txt" -o -name "*.doc" \)
/root/ckh/2.txt
/root/ckh/1.txt

# 搜索并排序
[root@kvm ckh]# ls
1.txt  2.txt  aaa.txt  DEMO.txt
[root@kvm ckh]#
[root@kvm ckh]# date +%s
1697818196
[root@kvm ckh]#
[root@kvm ckh]# find /root/ckh -type f -printf "%T@___%p\n" | sort -n
1697812492.9151189980___/root/ckh/2.txt
1697813652.3161136560___/root/ckh/1.txt
1697815506.8381817450___/root/ckh/aaa.txt
1697815527.7295462780___/root/ckh/DEMO.txt
[root@kvm ckh]#
[root@kvm ckh]# find /root/ckh -type f -printf "%t@___%p\n" | sort -n
Fri Oct 20 22:34:52.9151189980 2023@___/root/ckh/2.txt
Fri Oct 20 22:54:12.3161136560 2023@___/root/ckh/1.txt
Fri Oct 20 23:25:06.8381817450 2023@___/root/ckh/aaa.txt
Fri Oct 20 23:25:27.7295462780 2023@___/root/ckh/DEMO.txt
[root@kvm ckh]#
[root@kvm ckh]# find /root/ckh -type f -printf "%t@___%p\n" | sort -r
Fri Oct 20 23:25:27.7295462780 2023@___/root/ckh/DEMO.txt
Fri Oct 20 23:25:06.8381817450 2023@___/root/ckh/aaa.txt
Fri Oct 20 22:54:12.3161136560 2023@___/root/ckh/1.txt
Fri Oct 20 22:34:52.9151189980 2023@___/root/ckh/2.txt


# ctime 与文件的文件描述符 inode
[root@kvm ckh]# ls
1.txt  2.txt  aaa.txt  DEMO.txt
[root@kvm ckh]#
[root@kvm ckh]# ls 1.txt
1.txt
[root@kvm ckh]#
[root@kvm ckh]# ls -l 1.txt
-rw-r--r-- 1 root root 73 Oct 20 22:54 1.txt
[root@kvm ckh]#
[root@kvm ckh]# ls -i 1.txt
83886213 1.txt
[root@kvm ckh]#
[root@kvm ckh]# echo "777" >> 1.txt
[root@kvm ckh]#
[root@kvm ckh]# ls -i 1.txt
83886213 1.txt
[root@kvm ckh]# vim 1.txt
[root@kvm ckh]#
[root@kvm ckh]# ls -i 1.txt
83886218 1.txt

# 与 grep 搭配,搜索文件 + 查看内容
[root@kvm ckh]# ls
1.txt  2.txt  aaa.txt  DEMO.txt
[root@kvm ckh]#
[root@kvm ckh]# cat 2.txt
999
a
[root@kvm ckh]#
[root@kvm ckh]# find /root/ckh -name 2.txt | xargs grep "a"
a
[root@kvm ckh]#
[root@kvm ckh]# find /root/ckh -name 2.txt -exec grep "a" {} \;
a

# 与 xargs 命令搭配
[root@kvm ckh]# cat 2.txt
999
a
bb
cc
[root@kvm ckh]#
[root@kvm ckh]# cat 2.txt | xargs -n2
999 a
bb cc
[root@kvm ckh]#
[root@kvm ckh]# cat 2.txt | xargs -n3
999 a bb
cc
[root@kvm ckh]#
[root@kvm ckh]# echo "aa bb cc dd"
aa bb cc dd
[root@kvm ckh]#
[root@kvm ckh]# echo "aa bb cc dd" | xargs -n1
aa
bb
cc
dd
[root@kvm ckh]# cat 2.txt | xargs -n4
999 a bb cc

# -delete 删除
[root@kvm ckh]# ls
1.txt  2.txt  aaa.txt  DEMO.txt
[root@kvm ckh]#
[root@kvm ckh]# find /root/ckh -name 1.txt
/root/ckh/1.txt
[root@kvm ckh]#
[root@kvm ckh]# find /root/ckh -name 1.txt -delete
[root@kvm ckh]#
[root@kvm ckh]# ls
2.txt  aaa.txt  DEMO.txt
[root@kvm ckh]# find /root/ckh -name 2.txt -exec rm -rf {} \;
[root@kvm ckh]# ls
aaa.txt  DEMO.txt
2. printf 格式化输出
[root@kvm ckh]# printf "姓名: %s\n年龄:%d\n" "张凯华" 20
姓名: 张凯华
年龄:20