一、Linux删除(或者复制,移动)nagios的大量性能文件时报错
-bash: /bin/rm: Argument list too long
删除(复制或者移动)文件中包含的小文件数量过多,通常是由于受到 shell 参数个数限制所致。
这个是Linux系统存在的限制,可以通过如下指令查看该参数值的配置:
getconf ARG_MAX
结合awk进行操作:
ls -l| awk '{ print "rm -f ",$9}'|sh
通过 ls 来配合 xargs 删除 test 目录下的所有文件:
ls | xargs rm -r
通过 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