需要根据时间删除这个目录下的文件linux运维博客,/home/lifeccp/dicom/studies,清理掉20天之前的无效数据。
可以使用下面一条命令去完成:
1
find/home/lifeccp/dicom/studies-mtime +21 -name "*.*"-execrm-Rf {} ;
这个是根据时间删除。
下面简要解释一下,这句shell命令:
1
find/home/lifeccp/dicom/studies-mtime +21 -name "*.*"-execrm-Rf {} ;
当然也可以根据文件名、根据大小linux内核,根据其他不同条件过滤删除,或者修改等,可以考虑sort等命令结合使用。
1-1.快速删除大文件夹(注意目录后的结束符‘/’)(对于含有海量文件的目录,不能直接rm -rf删除,这样效率很慢:)
rsync-a--delete blank/ test/ 使用空文件夹 blank/ 覆盖原文件夹 test/
mkdirempty_dir&&rsync-a--deleteempty_dir/your_dir/&&rm-rfyour_dir/empty_dir#得把your_dir/再删除一下,因为里边的./文件很大
1-2.查找并删除文件
find./ -type f-name"*.log"-mmin+120-delete 删除当前目录下120min前的所有.log结尾文件
find./ -type f-name"*.log"-mtime +300-delete删除当前目录下300天前的所有.log结尾文件
这种方式要比下边语句快2-3倍linux 删除文件前n行,并且当目录中文件非常多时不会出现列表过长无法删除的异常。
find./-name"*.log"-mmin+120| xargs rm-f
或
find./-name"*.log"-mmin+120-exec rm {}-f # -exec表示后面执行命令"{}" -f表示不需要确认
find./-name"*.log"-mmin+120-execrm-f"{}"; #最后的分号不可少
1-3.
delete.sh:
for i in `ls -d path/shell/shell_pipe/step*qsub` # ls列出匹配上的目录 必须用-d 否则ls会把目录下的文件也都列出来
do
rm -r $i
done
for i in `ls path/*log`
do
rm $i
done
eg:快速删除目标文件中自己的qsub目录中的运行oe文件。
/share/app/msort/bin/msort -k rn5 file | grep 'name'|grep 'qsub'|awk '{print $8}'| while read ID #第八列是以qsub结尾的目录全路径linux 删除文件前n行,一个个给到$ID
do
for i in `ls $ID/*.[eo]*` #匹配filename.e.12345 filename.o.12345 文件
do
#echo $i
rm $i
done
for i in `ls $ID/*.log` #匹配filename.log 文件
do
#echo $i
rm $i
done
done
[0]
[1]