가장 큰 크기의 파일 하나만 유지하고 다른 파일은 모두 삭제하는 방법

가장 큰 크기의 파일 하나만 유지하고 다른 파일은 모두 삭제하는 방법

아래와 같은 디렉터리에 3~4개의 파일이 있습니다.

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

해당 파일의 파일명은 프레임 해상도 표현을 제외하면 거의 동일합니다.

(AAA는 파일 이름의 예입니다. 해당 파일 이름이 프레임 해상도를 제외하고 동일함을 나타냅니다.)

그리고 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/다시 나열하고 가장 큰 파일의 이름을 찾아낸 다음 나머지를 제거합니다.

편집: 파일 이름의 잠재적인 공백을 설명하기 위해 xargs에 -d 플래그를 추가했습니다. 보다이 답변더 많은 정보를 위해서.

관련 정보