제목이 너무 끔찍해서 정말 죄송합니다. 제목이 제가 설명할 수 있는 가장 좋은 단어입니다.
따라서 일부 서버 데이터의 백업 tar를 생성하여 /server/backups에 저장하는 백업 스크립트가 있지만 지난 주의 백업만 필요하므로 주간 작업으로 실행하고 백업 폴더를 정리하기 위해 이 스크립트를 생성했습니다.
#!/bin/bash
#initializing a with the amount of backup archives and b with the target max
a=find /server/backups/ -type f | wc -l
b=14
#if there are more backup files than target max
#delete the oldest files
if [ $a > $b ]
then
ls -1t /server/backups/ | tail -n +15 | xargs rm -f
fi
하지만 작동하지 않습니다. 저는 Linux를 처음 접했고 "디버깅"하는 방법을 모릅니다.
답변1
a=find /server/backups/ -type f | wc -l
그러면 명령이 실행 /server/backups/
되고 a
환경 변수가 find
. 아니면 실제로는 후행 슬래시 때문에 오류가 발생했을 수도 있습니다. 네가 원하는 건 하나야명령 대체.
if [ $a > $b ]
여기는>
끈비교하면 예를 들어 . 2
보다 클 것입니다 14
. 변수를 인용해야 하지만 숫자만 포함하는 경우에는 문제가 되지 않을 수 있습니다.
ls -1t /server/backups/ | tail -n +15 | xargs rm -f
여기에 공백, 따옴표 또는 개행 문자가 포함된 파일 이름에는 명백한 문제가 있습니다( xargs
입력이 기본적으로 해석되는 방식과 tail
줄 처리로 인해). 하지만 이를 무시할 수 있다면 파일 이름이 "nice"인 경우그리고GNU xargs가 있으면 실행할 수 있습니다
ls -t /server/backups/ | tail -n +15 | xargs -d '\n' -r rm
tail
15줄 미만이면 출력이 비어 있기 때문입니다. -d '\n'
기본적으로 인용될 수 있는 공백으로 구분된 단어 대신 전체 줄을 읽도록 xargs에 지시하고 -r
인수 없이 명령을 실행하지 않도록 지시합니다. 표준 기능도 아닙니다.