http를 통해 원격 컴퓨터와 동기화하고 오래된 파일을 삭제합니다.

http를 통해 원격 컴퓨터와 동기화하고 오래된 파일을 삭제합니다.

내 시스템(우분투)에 wget. . 모든 파일은 내 사무실에서 특정 시점에 생성되었으며 모두 동일한 시간과 날짜를 가지고 있습니다. Rsync 및 기타 사무실 연결은 허용되지 않습니다.

하루에 4번씩 동기화하는데 파일이 얼마나 자주 생성되는지에 대한 패턴은 없습니다. 폴더는 몇 주 동안 변경되지 않을 수도 있고 하루에 10번 변경될 수도 있습니다. 새 파일이 생성되면 이름은 A156.1.[a,b,x,y,z]와 유사합니다. 각 파일은 상당히 큽니다(~500MB).

따라서 내 시스템에는 더 이상 파일 세트(5)가 1개 이상(총 10개 파일 x 500MB = 5GB) 없게 됩니다.

폴더를 자주 확인하고 오래된 파일을 삭제하기 위해 cron으로 실행할 수 있는 간단한 스크립트가 있습니까? 그래서 마지막 5세트만 마치겠습니다. x일보다 오래된 파일 삭제와 같은 작업을 실행할 수 있지만 다음 파일 세트가 언제 생성될지는 확실하지 않습니다.

답변1

find파이프 sort로 연결할 수 있습니다 .날짜별로 정렬된 파일 나열을 사용한 다음 cut출력에서 ​​를 사용하여 파일 목록을 생성한 다음 을 사용하여 rm최신 5개 파일을 제외한 모든 파일을 삭제합니다. 이것을 정기적으로 실행하면 원하는 결과를 얻을 수 있습니다.

기존 스크립트에 대해서는 잘 모르지만 구현이 매우 간단할 것입니다.

답변2

zsh를 사용할 수 있다면글로벌 예선이렇게 하면 다음과 같은 작업이 쉬워집니다.

zsh -c 'rm work-folder/*(om[6,-1])'

이는 작업 폴더 디렉토리의 모든 파일을 o수정 시간별로 정렬하여 선택하는 것을 의미합니다 m.추가 선택범위는 6부터 끝까지입니다. 이렇게 하면 폴더에 최신 5개의 파일이 남게 됩니다.

디렉토리에 6개 이상의 파일이 있다고 가정하면 삭제에 대해 더 안전한지 테스트할 수 있습니다(모두 zsh에서).

files=(work/*(om))
[ ${#files[@]} -gt 5 ] && echo rm "${files[6,-1]}"

bash는 각 파일을 호출 stat하고 직접 추적 해야 하므로 더 많은 작업이 필요합니다.이 줄.

답변3

다음 스크립트는 디렉터리의 "새 파일"과 "이전 파일" 목록을 표시합니다. "새 파일"은 마지막 스크립트 실행 이후 수정된 파일이고, "이전 파일"은 마지막 스크립트 실행 이후 수정되지 않은 파일입니다.

스크립트는 출력을 date"타임스탬프 파일"에 기록하고 다음 실행 시 해당 파일을 사용하여 어떤 파일이 변경되었는지 확인합니다. 처음 실행하면 출력이 생성되지 않습니다.

이 스크립트는 수동으로 실행해야 하며 작성 시에는 기회만 제공됩니다.발각특정 디렉터리의 어떤 파일이 수정되었는지.

#!/bin/sh

topdir=$HOME  # change this to point to the top dir where your files are

stamp="$topdir/timestamp"

if [ -f "$stamp" ]; then
    echo 'New files:'
    find "$topdir" -type f ! -name timestamp -newer "$stamp"

    echo 'Old files:'
    find "$topdir" -type f ! -name timestamp ! -newer "$stamp"
fi

date >"$stamp"

이는 다음과 같이 수정될 수 있습니다.

  • 사용자에게 오래된 파일을 삭제하라는 메시지를 표시합니다.
  • 특정 패턴( -name 'pattern'예: 사용 -name 'A156.1.[abxyz]')과 일치하는 파일만 검색합니다.
  • 수정 시간 대신 inode 변경 시간("ctime")을 살펴보세요( 지원 하는 경우 -cnewer대신 사용 ).-newerfind
  • 등.

관련 정보