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