최신 파일 2개를 폴더에 보관하고 다른 파일은 삭제하세요.

최신 파일 2개를 폴더에 보관하고 다른 파일은 삭제하세요.

자동으로 생성된 파일이 포함된 백업 폴더가 내 서버에 있습니다. 그것들은 내 디스크 공간을 100% 차지합니다. 따라서 모든 파일을 삭제하고 최신 파일 2개를 유지하려면 cron을 만들어야 합니다.

이 작업을 수행하는 코드를 찾았지만 실행 방법을 모르겠습니다.

(temp_all=$(mktemp) && temp_last=$(mktemp) && { tac | tee $temp_all | sort -un > $temp_last ; } && grep -vf $temp_last $temp_all ; rm -f $temp_last $temp_all)

어떻게 해야 합니까? .sh 파일을 생성하고 매개변수를 사용하여 실행하시겠습니까? 어떻게 해야 합니까?

이 코드가 내 요구 사항을 충족합니까?

미리 감사드립니다!

답변1

사용 findperl(주의해서 사용하세요, unlink파일 삭제):

(다양한 유형의 파일을 처리할 수 있습니다: 줄 바꿈, 공백 포함...)

$ ls -ltr
total 0
-rw-rw-r-- 1 stardust stardust 0 févr. 14 00:21 foo
-rw-rw-r-- 1 stardust stardust 0 févr. 14 00:21 bar
-rw-rw-r-- 1 stardust stardust 0 févr. 14 00:21 base
-rw-rw-r-- 1 stardust stardust 0 févr. 14 00:21 qux

$ find /path/to/dir -type f -printf '%T@ %p\0' | 
      sort -z -nk1 |
      perl -0 -ne '
          m|\s+(\./.*)|ms and push(@files, $1);
          END{unlink for @files[0..($#files - 2)]}'

$ ls -ltr
total 0
-rw-rw-r-- 1 stardust stardust 0 févr. 14 00:21 base
-rw-rw-r-- 1 stardust stardust 0 févr. 14 00:21 qux

crontab에서 사용:

스크립트를 만듭니다(복사하여 셸에 붙여넣기만 하면 됩니다).

install -D -m755 /dev/null ~/bin/remove_files_except_2_last_ones
cat<<EOF > ~/bin/remove_files_except_2_last_ones
#!/bin/sh

. ~/.bashrc # or any other *rc file, to set PATH variable

find /path/to/dir -type f -printf '%T@ %p\0' | 
    sort -z -nk1 |
    perl -0 -ne '
        m|\s+(\./.*)|ms and push(@files, $1);
        END{unlink for @files[0..($#files - 2)]}'    
EOF
crontab -e

그런 다음 붙여넣습니다.

* * * * * ~/bin/remove_files_except_2_last_ones &>/tmp/2_last_ones.log

( * * * * *자신의 타이밍 사양에 따라 변경하십시오).

관련 정보