이전 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
, cut
및 tail
) 또는 -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/