以下のように、同じディレクトリに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フラグを追加しました。バラよりこの回答より多くの情報を知りたいです。