如何只保留一个最大的文件并删除所有其他文件

如何只保留一个最大的文件并删除所有其他文件

同一目录下有3或4个文件,如下所示;

AAA.360p.mp4
AAA.450p.mp4
AAA.720p.mp4
AAA.1080p.mp4

这些文件的文件名除了帧分辨率的表达之外几乎相同。

(AAA 是文件名的示例。表示这些文件名除了帧分辨率之外都是相同的。)

并且 AAA 之间有几个点。

例如,文件名是这样的;

Interesting.Comedy.E10.200406.450p.mp4
Interesting.Comedy.E10.200406.720p.mp4
Interesting.Comedy.E10.200406.1080p.mp4

每个文件的大小不同

(文件大小:360p < 450p < 720p < 1080p) → 始终如此。

我想只保留一个文件,即最大的文件,并删除所有其他文件。

目录的位置是/volume1/video/

它将仅在 Synology 上运行该命令。 (使用控制面板中的任务计划程序)

如果您向我解释,请在我的案例中包含目录路径,如上所述。

(因为我无法应用您推荐给我的代码,因为我缺乏理解。我很抱歉)

答案1

下面的代码对您很有用,但是您可以创建文件的副本并首先尝试该目录。

#!/bin/bash

var=`find /volume1/video/ -printf '%s %p\n'| sort -nr | head -n 1 | awk '{ print $2 }'`
largestfilename=`echo $var | rev | cut -d"/" -f1 | rev`

for i in `ls -S /volume1/video/`
do
        if [ ! $i == $largestfilename ]
        then
                rm -f /volume1/video/$i
        fi
done

答案2

LARGEST=$(ls -S /volume1/video/* | head -1)
ls /volume1/video/* | grep -v "$LARGEST" | xargs -d '\n' rm

第一行运行一个命令来列出/volume1/video/按大小排序的所有文件,并通过管道列出来head识别第一个文件。该命令的输出然后存储在名为 的变量中$LARGEST

第二行再次列出所有文件/volume1/video/,greps 出最大文件的名称,然后删除其余文件。

编辑:向 xargs 添加 -d 标志以考虑文件名中潜在的空格。看这个答案了解更多信息。

相关内容