计数并删除无关文件(bash)

计数并删除无关文件(bash),bash,count,Bash,Count,我一直在寻找以下问题的简洁解决方案 在给定目录中,我有以下文件: 10_MIDAP.nii.gz 12_MIDAP.nii.gz 14_MIDAP.nii.gz 16_restAP.nii.gz 18_restAP.nii.gz 我应该只有两个“MIDAP”文件和一个“restAP”文件。附加文件可能不包含完整数据,因此我需要删除它们。这些可能会更小和/或更早的序列号(例如,10) 我知道如何计算/回显文件数: MIDAP=`find $DATADIR -name "*MIDAP.nii.gz

我一直在寻找以下问题的简洁解决方案

在给定目录中,我有以下文件:

10_MIDAP.nii.gz
12_MIDAP.nii.gz
14_MIDAP.nii.gz
16_restAP.nii.gz
18_restAP.nii.gz
我应该只有两个“MIDAP”文件和一个“restAP”文件。附加文件可能不包含完整数据,因此我需要删除它们。这些可能会更小和/或更早的序列号(例如,10)

我知道如何计算/回显文件数:

MIDAP=`find $DATADIR -name "*MIDAP.nii.gz" | wc -l`
RestAP=`find $DATADIR -name "*restAP.nii.gz" | wc -l`

echo "MIDAP files = $MIDAP"
echo "RestAP files = $RestAP"
有没有关于如何简洁地删除不需要的文件的建议,比如我最终得到了两个“MIDAP”文件和一个“restAP”(在存在无关文件的情况下)?现在,想象一下会是这样的

if (( $MIDAP > 2 )); then
  ...magic happens
fi
谢谢你的建议

这里有一个方法

创建测试文件

$ for i in {1..10}; do touch ${i}_restAP; touch ${i}_MIDAP; done  
根据数字排序,并删除前N-1(或N-2)个文件


如果基于文件大小,您可能需要更改排序。

在您的用例中,不需要的文件的条件是什么?此时,我想我要删除最小大小的文件。因此,在“MIDAP”文件的情况下,保留最大的两个文件。谢谢,这非常有用!非常感谢。
$ find . -name '*restAP*' | sort -V | head -n -1 | xargs rm
$ find . -name '*MIDAP*'  | sort -V | head -n -2 | xargs rm

$ ls -1

10_MIDAP
10_restAP
9_MIDAP