2G보다 크고 여유 공간이 X 미만인 파일 찾기 및 삭제

2G보다 크고 여유 공간이 X 미만인 파일 찾기 및 삭제

다음 규칙에 따라 마운트 지점 아래에 있는 stdout/라는 파일을 삭제하는 방법은 무엇입니까?stderr/data/sdf

  1. 사용 가능한 디스크 공간(위 /dev/sdf)이 100G 미만입니다.

  2. stdout또는 파일 stderr크기가 2G보다 큽니다.

    /data/sdf/hadoop/yarn/log/application_1575355124522_0458/container_e245_1575355124522_0458_01_000002/stdout
    /data/sdf/hadoop/yarn/log/application_1575355124522_0458/container_e245_1575355124522_0458_03_000002/stdout
    /data/sdf/hadoop/yarn/log/application_1515153382036_0001/container_e13_1515153382036_0001_02_000003/stdout    
    

~에서df -h

/dev/sdf                   80G   76G  3.7G  82% /data/sdb

find크기에 따라 파일을 삭제하기 위해 다음 호출을 생각해 냈습니다 .

find /grid/sdf -type f \( -name "stdout" -o -name "stderr" \) -size +2000M -delete

하지만 사용 가능한 디스크 공간을 확인하는 방법을 모르겠습니다.

답변1

GNU 를 가정하면 df, 예를 들어 다음을 사용하여 여유 디스크 공간에 대한 조건을 추가할 수 있습니다.

[[ $(df --output=avail -B1 /grid/sdf | tail -n 1) -lt 100*1024*1024*1024 ]] && \
find /grid/sdf -type f \( -name "stdout" -o -name "stderr" \) -size +2000M -delete

필요에 따라 조정할 수 있습니다(예: 여유 공간이 100GiB 미만인 경우 파일 삭제).

while [[ $(df --output=avail -B1 /grid/sdf | tail -n 1) -lt 100*1024*1024*1024 ]]; do
    find /grid/sdf -type f \( -name "stdout" -o -name "stderr" \) -size +2000M -delete -quit
done

(해당 파일을 삭제해도 충분한 공간이 확보되지 않으면 무한 반복됩니다.)

외에도 다음을 df사용할 수도 있습니다 . ( 필수 아님 )findmntdf --output=avail -B1 /grid/sdf | tail -n 1findmnt -nbo AVAIL /grid/sdftail

관련 정보