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 head
para 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.