Как сохранить только один файл самого большого размера и удалить все остальные файлы

Как сохранить только один файл самого большого размера и удалить все остальные файлы

В том же каталоге, что и ниже, находятся 3 или 4 файла;

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

Имена этих файлов практически одинаковы, за исключением выражения разрешения кадра.

(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/снова выводит список всех файлов, извлекает имя самого большого из них и удаляет остальные.

Редактировать: Добавлен флаг -d в xargs для учета возможных пробелов в именах файлов. Смотретьэтот ответдля получения дополнительной информации.

Связанный контент