자동으로 생성된 파일이 포함된 백업 폴더가 내 서버에 있습니다. 그것들은 내 디스크 공간을 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
사용 find
및 perl
(주의해서 사용하세요, 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
( * * * * *
자신의 타이밍 사양에 따라 변경하십시오).