Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 使用shell脚本对文件进行排序,然后删除旧文件_Linux_Bash_Shell - Fatal编程技术网

Linux 使用shell脚本对文件进行排序,然后删除旧文件

Linux 使用shell脚本对文件进行排序,然后删除旧文件,linux,bash,shell,Linux,Bash,Shell,我有一个文件夹,里面有一些普通的文件。我想按修改日期对它们进行排序,保留最近的20个条目,并从剩下的内容中删除任何超过20天的内容 这是我删除超过20天的文件的代码 #!/bin/bash cleanup="../some path/" find $cleanup/*gz -mtime +20 -exec rm {} \; 但是,我不知道如何保留最后修改的20个文件,然后执行删除。如何修复它请?你可以用 awk 'NR > 20' 完全命令: find ...... | awk '

我有一个文件夹,里面有一些普通的文件。我想按修改日期对它们进行排序,保留最近的20个条目,并从剩下的内容中删除任何超过20天的内容

这是我删除超过20天的文件的代码

#!/bin/bash
cleanup="../some path/"

find $cleanup/*gz -mtime +20 -exec rm {} \;

但是,我不知道如何保留最后修改的20个文件,然后执行删除。如何修复它请?

你可以用

awk 'NR > 20' 
完全命令:

find ...... | awk 'NR > 20' | xargs -r  rm
比如说

seq 30 | xargs -i echo 'file{}' | awk 'NR > 20' | xargs  -r rm

谢谢你的回复。因此,在我的示例中,我应该将“|awk'NR>20”放在哪里?我有点困惑。我没有检查,但这应该可以工作“
find$cleanup/*gz-mtime+20 | awk'NR>20”| xargs-r rm
谢谢,它非常有用。您可能应该使用
find“$cleanup”-name”*.gz
,这样bash就不会使用
*
扩展。