最大のファイルを1つだけ保持し、他のファイルをすべて削除する方法

最大のファイルを1つだけ保持し、他のファイルをすべて削除する方法

以下のように、同じディレクトリに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)→常に。

最大のファイルは1つだけ保持し、残りはすべて削除したいと思います。

ディレクトリの場所は/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

2行目はすべてのファイルをリストし、/volume1/video/最大のファイルの名前を見つけて残りを削除します。

編集:ファイル名の潜在的なスペースを説明するために、xargsに-dフラグを追加しました。バラよりこの回答より多くの情報を知りたいです。

関連情報