오래된 로그를 이동하는 방법 - mysql 로그

오래된 로그를 이동하는 방법 - mysql 로그

이전 binlog를 디렉터리로 옮긴 다음 새 폴더로 이동하기 전에 압축해야 합니다.

공간 제약으로 인해 몇 가지 문제에 직면했습니다.

아래 명령은 작동하지 않습니다.

ls -t binlog* | tail -n +4 | xargs mv /path-to-directory
ls -t binlog* | tail -n +4 | xargs echo mv /path-to-directory

답변1

logrotate를 정말로 사용하고 싶지 않다면 find구문 분석되지 않은 출력을 사용 ls하고 1970.01.01 이후 마지막으로 발견된 파일의 수정 시간(초)도 인쇄하세요.

$ find ./* -maxdepth 0 -name "binlog*" -printf "%T@ %f\0" \
 | sort -z -k 1 -r \
 | cut -z -d " " -f2- \
 | tail -z -n +4 \
 | xargs -0 -I {} mv -f "{}" /path/to/directory/

위의 내용은 행을 구분하기 위해 NUL을 사용하여 -z( sort, cuttail) 또는 -0( xargs)를 허용하는 GNU coreutils를 가정합니다. 즉, 파일 이름에 개행 문자가 포함되어 있어도 코드가 작동한다는 의미입니다.

파일 이름에 개행 문자가 없다고 확신할 수 있다면, \0첫 번째 필드(파일의 마지막 수정 시간)에서 한 줄씩 정렬하기 때문에 발견된 각 파일을 null( ) 종료할 필요가 없다는 것이 밝혀졌습니다. 여기서 from 문제가 있는 문자가 포함되어 있지 않습니다. 위 내용을 다음과 같이 단순화할 수 있습니다.

$ find ./* -maxdepth 0 -name "binlog*" -printf "%T@ %f\n" \
 | sort -k 1 -r \
 | cut -d " " -f2- \
 | tail -n +4 \
 | xargs -I {} mv -f "{}" /path/to/directory/

관련 정보