find查找清理大文件时通过inode来清理包含特殊符号的文件

- linux系统管理

服务器磁盘空间占用较高时,一般会用 find 命令查找大文件然后进行处理,如果确定都是日志文件没什么用的话可能就直接批量 echo 清空了。但是有时候要清空的日志文件名中包含特殊符号的话就会导致清空出现异常。这里采用指定 inode 号来清空文件避免此问题。

查找大文件

[me@imzcy data]$ find ./ -type f -size +1G
./pro_mqtt_all/pro_payOrderQueue/c:\temp\nlog-Test.log
./old_build/pro_gateway_group/pro_dyDevice/a/data/pro_gateway_group/pro_dyDevice/c:\temp\nlog-Test.log
./pro_gateway_group/pro_logistics/logs/start1_20210202_101030.log
./pro_gateway_group/pro_logistics/logs/start1_20230331_160530.log
[me@imzcy data]$ 

因为文件名包含特殊符号,所以直接 echo 重定向清空是不行的,反而会新创建一个文件。

[me@imzcy data]$ echo > ./pro_mqtt_all/pro_payOrderQueue/c:\temp\nlog-Test.log
[me@imzcy data]$ ll -h ./pro_mqtt_all/pro_payOrderQueue/*.log
-rw-rw-r-- 1 me me 1.2G Sep 15 15:22 ./pro_mqtt_all/pro_payOrderQueue/c:\temp\nlog-Test.log
-rw-rw-r-- 1 me me   1 Sep 15 14:56 ./pro_mqtt_all/pro_payOrderQueue/c:tempnlog-Test.log
[me@imzcy data]$ 


find查找大文件同时显示文件inode

[me@imzcy data]$ find ./ -type f -size +1G -printf "%i %p\n"
3932537 ./pro_mqtt_all/pro_payOrderQueue/c:\temp\nlog-Test.log
6292443 ./old_build/pro_gateway_group/pro_dyDevice/a/data/pro_gateway_group/pro_dyDevice/c:\temp\nlog-Test.log
3283275 ./pro_gateway_group/pro_logistics/logs/start1_20210202_101030.log
3294420 ./pro_gateway_group/pro_logistics/logs/start1_20230331_160530.log
[me@imzcy data]$ 

验证通过指定 inode 能正常清空单个指定文件

[me@imzcy pro_payOrderQueue]$ find ./ -type f -inum 3932537 -exec sh -c 'echo "" > "$0"' {} \;
[me@imzcy pro_payOrderQueue]$ ll -h *.log
-rw-rw-r-- 1 me me 1.4K Sep 15 16:04 c:\temp\nlog-Test.log
-rw-rw-r-- 1 me me    1 Sep 15 14:56 c:tempnlog-Test.log
[me@imzcy pro_payOrderQueue]$ 


批量清空查找到的所有大文件

[me@imzcy data]$ find ./ -type f -name "*.log" -size +1G -exec sh -c 'echo "" > "$0"' {} \;
[me@imzcy data]$ find ./ -type f -size +1G -exec ls -lh {} \;
[me@imzcy data]$