如何只保留一個最大的文件並刪除所有其他文件

如何只保留一個最大的文件並刪除所有其他文件

同一目錄下有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 標誌以考慮檔案名稱中潛在的空格。看這個答案了解更多。

相關內容