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

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

아래와 같이 동일한 디렉터리에 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 플래그를 추가했습니다. 바라보다이 답변더 많은 정보를 알고 싶습니다.

관련 정보