我的应用程序日志将在linux系统的以下文件夹中创建。
Folder 1: 100001_1001
folder 2 : 200001_1002
folder 3 :300061_1003
folder 4: 300001_1004
folder 5 :400011_1008
要删除除上述文件夹中的最新文件以外的所有文件,并希望将其添加到cron作业中。
我尝试下面一个不工作需要帮助
30 1 * * * ls -lt /abc/cde/etc/100* | awk '{if(NR!=1) print $9}' | xargs -i rm -rf {} \;
30 1 * * * ls -lt /abc/cde/etc/200* | awk '{if(NR!=1) print $9}' | xargs -i rm -rf {} \;
30 1 * * * ls -lt /abc/cde/etc/300* | awk '{if(NR!=1) print $9}' | xargs -i rm -rf {} \;
30 1 * * * ls -lt /abc/cde/etc/400* | awk '{if(NR!=1) print $9}' | xargs -i rm -rf {} \;
答案 0 :(得分:0)
你可以使用这个包含所有gnu实用程序的管道(这样我们也可以处理带有特殊字符,空格和glob字符的文件路径)
find /parent/log/dir -type f -name '*.zip' -printf '%T@\t%p\0' |
sort -zk1,1rn |
cut -zf2 |
tail -z -n +2 |
xargs -0 rm -f
答案 1 :(得分:0)
使用稍微修改过的方法:
find /abc/cde/etc/100* -printf "%A+\t%p\n" | sort -k1,1r| awk 'NR!=1{print $2}' | xargs -i rm "{}"
查找版本不会缺少路径,所以这可能工作(我对目录结构一无所知,以及100 *指向目录,文件还是一组文件......
答案 2 :(得分:0)
您应该使用find
。它有一个-delete
操作,可以删除符合您规范的文件。 警告:-delete
很容易出错。首先测试你的命令。例如,要在*.zip
下找到名为a/b/c
的所有文件(仅限文件):
find a/b/c -depth -name '*.zip' -type f -print
这是测试,它将打印最终命令将删除的所有文件(不要忘记-depth
,这很重要)。一旦你确定,执行删除的命令是:
find a/b/c -depth -name '*.zip' -type f -delete
find
还有按上次修改日期选择文件的选项,按大小...例如,您可以查找至少24小时前修改过的所有文件:
find a/b/c -depth -type f -mtime +0 -print
并仔细检查后删除它们:
find a/b/c -depth -type f -mtime +0 -delete