![오래된 로그를 이동하는 방법 - mysql 로그](https://rvso.com/image/192244/%EC%98%A4%EB%9E%98%EB%90%9C%20%EB%A1%9C%EA%B7%B8%EB%A5%BC%20%EC%9D%B4%EB%8F%99%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%20-%20mysql%20%EB%A1%9C%EA%B7%B8.png)
이전 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를 사용하고 싶지 않다면 1970.01.01 이후 마지막으로 발견된 파일의 수정 시간(초)을 인쇄하면서 find
출력을 구문 분석하지 않는 것을 사용하십시오.ls
$ 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/
-z
위의 내용은 NUL로 구분된 행을 사용하기 위해 ( sort
, cut
및 tail
) 또는 -0
( )를 허용하는 GNU coreutils를 가정합니다. xargs
즉, 파일 이름에 줄바꿈이 있어도 코드가 올바르게 작동합니다.
파일 이름에 개행 문자가 없다고 확신할 수 있다면, \0
첫 번째 필드(파일의 마지막 수정 시간)에서 줄 단위로 정렬하기 때문에 발견된 각 파일을 null( ) 로 종료할 필요가 없다는 것이 밝혀졌습니다. )에는 문제가 있는 문자가 포함되어 있지 않습니다. 위 내용을 다음과 같이 단순화할 수 있습니다.
$ 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/