cat命令

1、cat命令能够显示或拼接文件内容

1
2
3
4
# 格式:cat file1 file2 file3 ...
cat debug.sh sleep.sh

echo "hello shell" | cat temp.txt

2、去掉多余的空白行

1
cat -s file

3、将制表符显示为^I

1
2
# cat -T file
cat -T muli_blanks.txt

4、显示行号

1
2
# cat -n file
cat -n muli_blanks.txt

5、利用管道并重定向输出会清空输入文件

cat命令不允许使用相同的文件作为输入和重定向后的输出。利用管道并重定向输出会清空输入文件。

1
2
3
4
5
# muli_blanks.txt 被置空
cat muli_blanks.txt | cat -n muli_blanks.txt > muli_blanks.txt

# muli_blanks.txt 被置空
cat muli_blanks.txt > muli_blanks.txt

find命令

find命令的工作方式如下:沿着文件层次结构向下遍历,匹配符合条件的文件,执行相应的操作。默认的操作是打印出文件和目录,这也可以使用-print选项来指定。

格式:find base_path

1
2
3
find base_path -print
#
find base_path -print0

-print:使用\n换行符

-print0:使用空字符\0

示例:find . -print 打印当前目录下的所有文件、目录及子目录

. 当前目录

..子目录

1、-name根据文件名搜索

1
2
find . -name "*.txt" -print
find . -iname 'temp.txt'

-iname忽略字母大小写

find支持逻辑操作符,-a-and代表逻辑与(and),-o-or代表逻辑或(OR)

1
2
find . -name "*.txt" -o -name "*.sh"
find . -name "*.txt" -a -name "*em*"

2、-path根据文件的路径及名称进行搜索

1
find /root/ -path "*/test/*.sh" -print

3、-regex 根据正则匹配文件路径及名称

-regex选项和-path类似,只不过前者是基于正则表达式来匹配文件路径的。

1
2
# ( 和 | 需要转义
find . ! -regex ".*.\(txt\|sh\)$"

-iregex选项可以让正则表达式在匹配时忽略大小写

4、! 否定参数

find也可以用!排除匹配到的模式

1
find . ! -name "*.sh"

5、-maxdepth-minidepth 基于目录深度搜索

-maxdepth-mindepth选项可以限制find命令遍历的目录深度

1
2
find . -maxdepth 2 -name "*.txt"
# ./m1/test1.txt

6、-type根据文件类型进行搜索

image-20210727184927234

1
2
find . -type f -print
find . -type d

7、根据文件时间戳搜索

❏ 访问时间(-atime):用户最近一次访问文件的时间。

❏ 修改时间(-mtime):文件内容最后一次被修改的时间。

❏ 变化时间(-ctime):文件元数据(例如权限或所有权)最后一次改变的时间。

默认单位为

- 表示小于

+表示大于

1
2
3
find . -type f -atime +1  # 最后一次访问时间大于1天
find . -type f -atime -1 # 最后一次访问时间小于1天
find . -type f -atime 1 # 最后一次访问时间等于1天

以分钟计时

❏ -amin(访问时间);

❏ -mmin(修改时间);

❏ -cmin(变化时间)。

1
2
3
find . -type f -amin 1
find . -type f -amin -2
find . -type f -mmin 100

-newer选项可以指定一个用于比较修改时间的参考文件,然后找出比参考文件更新的(更近的修改时间)所有文件。

1
find . -type f -newer muli_blanks.txt

8、-size基于文件大小搜索

1
2
3
find . -type f -size -100k
find . -type f -size +100b
find . -type f -size +100c

❏ k:KB。

❏ b:块(512字节)。

❏ c:字节。

❏ w:字(2字节)。

❏ k:千字节(1024字节)。

❏ M:兆字节(1024K字节)。

❏ G:吉字节(1024M字节)。

9、-perm基于文件权限和所有权的匹配

-perm选项指明find应该只匹配具有特定权限值的文件。

1
2
find . -type f -perm 644
find . -type f -perm 755

-user USER 找出由某个特定用户所拥有的文件

1
2
find . -type f -user root
find . -type f -user mai

10、利用find执行相应操作

10.1、-delete删除匹配的文件

1
find . -type f -name "a*" -delete

10.2 -exec执行命令

1
find . -type f -name "find*" -exec chmod 755 {} \;

使用{}代表文件名

注意:该命令结尾的;。必须对分号进行转义,否则shell会将其视为find命令的结束。

我们无法在-exec选项中直接使用多个命令。该选项只能够接受单个命令,不过我们可以耍一个小花招。把多个命令写到一个shell脚本中(例如command.sh),然后在-exec中使用这个脚本

1
-exec ./commands.sh {} \;

-exec可以同printf搭配使用来生成输出信息

1
2
find . -type f -name "input.*" -exec printf "file_name is %s\n" {} \;
# file_name is ./input.txt

10.3 -prune让find跳过特定的目录

1
2
# 跳过*.sh文件
find . -name "*.sh" -prune -o -print
作者

Fahsa

发布于

2021-11-01

更新于

2021-11-01

许可协议

评论