文件查找

Posted Y753

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件查找相关的知识,希望对你有一定的参考价值。

重定向

作用:把原本要输出在终端上的内容,重定向输出到其他设备或文件中

## 标准输入
stdin: <或者 0< <<或者0<<

cat </etc/passwd
grep root < /etc/passwd
tr 原内容 新内容 < /etc/passwd

cat << EOF
<1
<2
<3
<EOF
#屏幕显示123

cat >> yjt.txt << EOF
<2
<3
<4
<EOF
# 写入234追加到yjt.txt

管道技术

xargs:处理数据流,有些命令如果没有标准输入可以使用xargs

## 1.将管道符前面的标准输出进行排列
## 2.将排列后的内容,放到后面命令结尾处理

具体使用,要看需求

[root@Y ~]# ls yjt.txt |xargs sed s#内容#要改的内容#g

find基础语法

find [路径][选项][表达式][动作]
-a(与,和)#(默认)
-o(或)
!(非)

find选项

按文件类型查找

-type :
f:可编辑的文件
d:目录
l:软连接
b:块设备文件 磁盘,U盘 /dev/sda
c:字符设备文件 终端
s:socket 安全套接字文件
p:管道文件

find [路径][选项]
[root@Y ~]# find /root -type f (太多选取前五)
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
/root/.cshrc
/root/.tcshrc

# 查看找出文件的详细信息
[root@Y ~]# find /root -type f|xargs ls -l (太多选取前三)
-rw-r--r--. 1 root root 39 Apr 16 20:50 /root/1
-rw-r--r--. 1 root root 2 Apr 30 2022 /root/123.txt
-rw-------. 1 root root 1469 Mar 16 00:23 /root/anaconda-ks.cfg

# 查询/etc/目录下所有目录,总共多少个?
[root@Y ~]# find /etc/ -type d |wc -l
596

按文件大小查找

-size
-:小于
+:大于
num:精准但是又不精确的匹配


# 1.在/opt下创建1000个文件
# 2.使用find找出(/opt下小于1k的文件)并删除
[root@Y ~]# find /opt/ -size -1k |xargs rm -rf

# 1.在/opt下创建1000个文件
# 2.使用find找出(/opt下小于1k的文件)把它们全部移动到/tmp下
mv 源文件 目标路径
mv -t 目标路径 源文件
交换位置
[root@Y ~]# find /opt/ -size -1k |xargs mv -t /tmp

xargs:
-i:指定数据流的位置,将数据流放入中
find /opt/ -size -1k |xargs -i mv /tmp

按文件名查找

-name:严格区分大小写   
[root@Y ~]# find /root -name yjt
[root@Y ~]# find /root -name *yjt
[root@Y ~]# find /root -name yjt*
[root@Y ~]# find /root -name *yjt*

-iname:不区分大小写
[root@Y ~]# find /root -iname yjt

按文件时间查找

-atime:文件访问时间差找
-mtime:文件内容创建,修改时间差找
-ctime:文件属性,修改时间差找

Num:查找第N天的文件(不包括今天)
+Num:查找第N天之前的所有文件(不包括今天)
-NUm:查找从今天开始算,7天内的文件

# 一个文件有以下三种时间
access time:atime
modify time:mtime
change time:ctime

# 查看三种时间
[root@Y ~]# stat 1(文件名 )
File: ‘1’
Size: 39 Blocks: 8 IO Block: 4096 regular file
Device: 10303h/66307d Inode: 33668606 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2022-04-16 20:50:37.603048090 +0800
Modify: 2022-04-16 20:50:01.400046787 +0800
Change: 2022-04-16 20:50:01.400046787 +0800

for i in `seq -w 30`;do date -s 202204$i && touch file-$i;done(for循环)

## 保留近七天的文件
[root@Y ~]# find /opt ! -mtime -7|xargs rm -f

按照文件用户和组查找

-user:查找文件的属主
-nouser:文件没有属主用户的

-group:查找文件的属组
-nogroup:文件没有属组的

多条件组合查找

[root@Y ~]# find /opt/ -mtime -7 (单时间查找)
[root@Y ~]# find /opt/ -mtime -7 -type d(时间+名称查找)
[root@Y ~]# find /opt/ -name dir* -name *0 -type f -mtime
-7 -size +1K(名字+名字+文件类型+时间+文件大小查找)

按权限查找

-perm

## 权限精确查找
[root@Y ~]# find ./ -perm 644
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./file9
./file1
./123.txt
./1

[root@Y ~]# find ./ -perm 524
./oldboy.txt

## -权限
# 每个权限位上都要包含该数字权限的所有权限
[root@Y ~]# find ./ -perm 777 - ls
777
rwxrwxrwx

# /权限
# 总共三个权限位,只要有一个权限位的权限被包含,就可以找到
[root@Y ~]# find ./ -perm /722 -ls
属主权限位,有一个r或者有一个w就满足条件
属组权限位,有一个r就满足条件
其他用户权限位,有一个r就满足条件

按深度查找

-maxdepth
针对目录层级查找
# 查找/etc目录下的所有1级和2级目录
[root@Y ~]# find /etc -type d -maxdepth 2

find动作

-print:打印查找到的内容到终端上(find命令默认就是打印结果  -print

-ls:查看文件的详细信息 |xargs ls -l 或者 ls -l $(find xxx) 或者ls -l `find xxx`

-delete:删除查找到的文件(bug跟ls,ls看不见的,也删除不掉)并且只能删除空目录
其他删除方法: |xargs rm -fr 或者 rm -fr $(find xxx) 或者 rm -fr `find xxx`
[root@Y ~]# find / -name etc -delete
find: cannot delete ‘/run/initramfs/state/etc’: Directory not empty
find: cannot delete ‘/etc’: Directory not empty
find: cannot delete ‘/var/tmp/etc’: Directory not empty

-ok:找到文件后,执行后面的bash命令,询问是否要操作
语法:-ok 系统命令 \\;
find / -type f -name file* -ok mv /tmp \\;

-exec:找到文件后,执行后面的bash命令
语法:-exec 系统命令 \\;
find / -type f -name file* -exec mv /tmp \\;


以上是关于文件查找的主要内容,如果未能解决你的问题,请参考以下文章

查找列表/文件中以特定前缀/后缀开头/结尾的所有单词

fatal error C1010: 在查找预编译头时遇到意外的文件结尾

搜索系统中所有以.repo结尾的文件并删除(find命令详解及xargs命令详解)

在linux中,把指定路径下(包含子目录)中含.sh结尾的文件及目录查找出来,输入到指定文件中,的脚本。

error C1010:在查找预编译头文件时遇到意外的文件结尾——————vs错误

查找/xusx下所有7天以前的log结尾并且大于10k的文件移动到/tmp