find脚本

原文链接: https://blog.csdn.net/USTC_Zn/article/details/78834340

一、Linux删除(或者复制,移动)nagios的大量性能文件时报错

-bash: /bin/rm: Argument list too long

删除(复制或者移动)文件中包含的小文件数量过多,通常是由于受到 shell 参数个数限制所致。

这个是Linux系统存在的限制,可以通过如下指令查看该参数值的配置:

getconf ARG_MAX

结合awk进行操作:

ls -l| awk '{ print "rm -f ",$9}'|sh

结合 xargs

通过 ls 来配合 xargs 删除 test 目录下的所有文件:

ls | xargs rm -r

结合 find

通过 find 来完成,更加安全智能,支持的参数更多。

可以先使用 ls 命令列出需要删除的文件看是否正确,然后再执行删除命令。例如,通过如下指令,删除 test 目录下的 png 文件:

find /usr/local/tests/ -name "*.png" |xargs rm -r

查找文件并移动到另外文件夹(按时间建立文件夹目录):

#!/bin/bash
[ -d "/mnt/bnas/bak/2019" ] || mkdir /mnt/bnas/bak/2019
cd /mnt/vnas/bak/SOT/SOT数据/
find /mnt/vnas/SOT/SOT数据/ -maxdepth 1 -type f -name "*.*" -exec mv {} /mnt/bnas/bak/2019 \;
cd /mnt/anas/bak/SOT/SOT数据/
find /mnt/anas/SOT/SOT数据/ -maxdepth 1 -type f -name "*.*" -exec mv {} /mnt/bnas/bak/2019 \;
cd /mnt/anas/bak/2019
for f in *.csv *.txt *.mdb *.log *.stdf *.ptl *.plf *.lsr *.spd *.xls *.CAT *.CLS *.dl4 *.XLS
do
   datedir=$(stat -c +%y "$f" | sed 's/ .*//;s/-//g')   #提取时间后,替换 .和-为空,既删除 .和-

   [ -d "$datedir" ] || mkdir "$datedir"
   mv "$f" "$datedir"
   done

其中,关键脚本:find /mnt/anas/SOT/SOT数据/ -maxdepth 1 -type f -name "*.*" -exec mv {} /mnt/bnas/bak/2019 \;

mv、cp、rm基本上都是同一类用法,也可以写成:

find . -name "*fastq.gz"|grep GEN190734SZ|xargs -i mv {} /home/dengqiuyang/test/

又比如把当前目录下大于10G的文件移动到test目录下:

find  . -size +10G -type f | xargs -I '{}' mv {} /test/     

find . -size +10G -type f | -exec mv {} /test \;

两种写法都是可以的。

所以,find用法总结:

文件查找
find按条件查找文件
格式:find [目录]  [条件1] [-a|-o] [条件2]
常用条件表示:
-type 类型 [f文本文件,d目录,b0,1c,l快捷方式]
格式:
[root@server0 cc]# find /root/Desktop/  -name "bb"  -type l
[root@server0 cc]# find /root/Desktop/  -name "bb"  -type f
-name ‘文档名称’(注意单引号)
-size +|-文件大小[k,M,G]
格式:
[root@server0 cc]# find /root/ -size +300k
-user 用户名
格式:
[root@server0 ~]# find /  -user  abc123
• 使用find命令的 -exec 操作
– find .. .. -exec 处理命令 {} \;
– 优势:以 {} 代替每一个结果,逐个处理,遇 \; 结束
 

# find /boot/ -size +300k    -exec cp -r {} /opt   \;


# ls /opt/


# find  /   -user student  -type f   


# mkdir /root/findfile


# find  /   -user student  -type f  -exec cp {}  /root/findfile \;


# ls /root/findfile
限制目录深度的查找(最大层数)
find  目录  -maxdepth 1(层数)   -name  ‘*.txt’

[root@server0 ~]# find  /  -maxdepth   2  -name  '*.conf'
根据文件修改时间
find    ./ -mtime    +90

 

你可能感兴趣的:(find脚本)