05-find
原创大约 4 分钟
文件准备
# echo 1 > 1.log
# echo 12 > 2.log
# echo 123 > 3.log
# echo 1234 > filename.txt
# mkdir ./test
# echo 1234 > ./test/devops.log
# echo 1234 > ./test/devops.log
# touch ./test/pic.jpg./
├── 1.log
├── 2.log
├── 3.log
├── filename.txt
└── test
├── devops.log
└── pic.jpg查找文件
find
#查询./目录下所有.log的文件每个的大小 -type f查询类型为文件
# 注:xargs组合多个命令的一个工具
# find ./ -type f -name "*.log"|xargs du -sh
4.0K ./3.log
4.0K ./2.log
4.0K ./1.log
4.0K ./test/devops.log
xargs:这个命令用于将输入数据转换成命令行参数,并将其传递给后面的命令。在这个命令中,它接收find命令的输出(即查找到的.log文件列表)作为输入。
du -sh:du命令用于计算文件和目录的磁盘使用量。-s选项表示仅显示每个参数的总大小,而不列出其子目录的大小;-h选项表示以人类可读的格式显示文件大小(例如,以KB、MB、GB等)。
du -sh命令没有接收到任何文件或目录的输入,它只会显示当前目录的大小
# 复制./目录下所有的.log后缀的文件到./logs下
find ./ -type f -name "*.log" -exec cp -a {} ./logs \;
find命令会将找到的每个文件作为参数传递给-exec后面指定的命令,然后执行该命令。
-a: 这个选项表示进行彻底的复制,包括文件的所有属性(如权限、所有者、时间戳等)。{}: 这是一个占位符,find命令会将找到的每个文件名替换到这个占位符的位置,从而将其作为cp命令的参数传递。\;: 这个分号表示-exec命令的结束。在Linux中,分号是特殊字符,需要用反斜杠(\)进行转义,以确保它不被Shell解释。
find ./
-type f
-path "./test/*"
-o -path "./filename.txt"
-o -type f -name "*.log"
-print
-o表示逻辑 OR 运算符,它意味着查找时会同时考虑两个条件:-path "./filename.txt"和-name "*.log"。但是,由于-path "./filename.txt"只匹配特定的路径而不是文件名,它可能被-name "*.log"所覆盖。
# 比较下面两个打包的区别
# 全部打包一个文件
find /mnt/ -type f -path "/mnt/test/*" -o -path "/mnt/filename.txt" -o -type f -name "*.log" -print|xargs tar zcvf allLogs.tar.gz
# 挨个独立打包
find /mnt/ -type f -path "/mnt/test/*" -o -path "/mnt/filename.txt" -o -type f -name "*.log" -print -exec tar zcvf {}.tar.gz {} \;链接文件
ln
ln -svf # 软链接,另外创建一个硬链接(对比下与软链接的不一样之处)
都使用绝对路径
-s:创建符号链接(软链接)。这告诉ln命令创建一个指向源文件的符号链接,而不是创建一个硬链接(hard link)。-v:详细模式(verbose mode)。在执行命令时输出详细信息,包括创建的符号链接的名称。-f:强制模式(force mode)。如果目标位置已经存在同名的文件或符号链接,强制执行链接操作并覆盖现有的文件或链接。
不带-s则硬链接
- 硬链接:当原始文件被删除时,与之相关的硬链接仍然保留并且仍然可用,因为它们实际上指向相同的数据块。只有当所有的硬链接都被删除后,文件系统才会释放空间。
- 软链接:如果原始文件被删除或移动,软链接将指向一个不存在的目标,称为“坏链接”。要修复软链接,需要重新创建指向正确目标的软链接。