Como manter apenas um arquivo de tamanho maior e excluir todos os outros arquivos

Como manter apenas um arquivo de tamanho maior e excluir todos os outros arquivos

Existem 3 ou 4 arquivos no mesmo diretório abaixo;

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

Os nomes desses arquivos são quase os mesmos, exceto a expressão da resolução do quadro.

(AAA é um exemplo de nome de arquivo. Para mostrar que esses nomes de arquivo são iguais, exceto a resolução do quadro.)

E existem vários pontos entre AAA.

Por exemplo, o nome do arquivo é assim;

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

Os tamanhos de cada arquivo são diferentes

(tamanho do arquivo: 360p <450p <720p <1080p) → É sempre verdade.

Gostaria de manter apenas um arquivo, aquele de maior tamanho e excluir todos os outros arquivos.

A localização do diretório é/volume1/video/

Será executado o comando apenas na sinologia. (para usar o agendador de tarefas no painel de controle)

Se você me explicar, inclua o caminho do diretório no meu caso, como acima.

(porque não consigo aplicar o código que você me recomenda por falta de compreensão. Peço desculpas)

Responder1

O código abaixo será útil para você, mas você pode criar uma cópia dos arquivos e experimentar primeiro nesse diretório.

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

Responder2

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

A primeira linha executa um comando para listar todos os arquivos /volume1/video/classificados por tamanho e canais listados headpara identificar o primeiro. A saída desse comando é então armazenada em uma variável chamada $LARGEST.

A segunda linha lista todos os arquivos /volume1/video/novamente, digita o nome do maior e remove o restante.

Editar: Adicionado o sinalizador -d ao xargs para contabilizar possíveis espaços em branco nos nomes de arquivos. Veresta respostapara mais informações.

informação relacionada