Cómo conservar solo un archivo de mayor tamaño y eliminar todos los demás archivos

Cómo conservar solo un archivo de mayor tamaño y eliminar todos los demás archivos

Hay 3 o 4 archivos en el mismo directorio que se muestra a continuación;

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

Los nombres de esos archivos son casi los mismos excepto la expresión de la resolución del cuadro.

(AAA es un ejemplo de nombre de archivo. Para presentar que esos nombres de archivo son los mismos excepto la resolución de fotograma).

Y hay varios puntos entre AAA.

Por ejemplo, el nombre del archivo es así;

Interesting.Comedy.E10.200406.450p.mp4
Interesting.Comedy.E10.200406.720p.mp4
Interesting.Comedy.E10.200406.1080p.mp4

Los tamaños de cada archivo son diferentes.

(tamaño de archivo: 360p < 450p < 720p < 1080p) → Siempre es cierto.

Me gustaría conservar solo un archivo, el de mayor tamaño, y eliminar todos los demás archivos.

La ubicación del directorio es/volume1/video/

Se ejecutará el comando solo en Synology. (para usar el programador de tareas en el panel de control)

Si me lo explica, incluya la ruta del directorio en mi caso como se indica arriba.

(porque no puedo aplicar el código que me recomiendas por falta de comprensión. Pido disculpas)

Respuesta1

El siguiente código le resultará útil; sin embargo, puede crear una copia de los archivos y probar ese directorio primero.

#!/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

Respuesta2

LARGEST=$(ls -S /volume1/video/* | head -1)
ls /volume1/video/* | grep -v "$LARGEST" | xargs -d '\n' rm

La primera línea ejecuta un comando para enumerar todos los archivos /volume1/video/ordenados por tamaño y canaliza esa lista headpara identificar el primero. La salida de ese comando luego se almacena en una variable llamada $LARGEST.

La segunda línea enumera todos los archivos /volume1/video/nuevamente, busca el nombre del más grande y elimina el resto.

Editar: se agregó el indicador -d a xargs para tener en cuenta posibles espacios en blanco en los nombres de archivos. Veresta respuestapara más información.

información relacionada