В том же каталоге, что и ниже, находятся 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 для учета возможных пробелов в именах файлов. Смотретьэтот ответдля получения дополнительной информации.