centos 7의 head 명령 z 플래그

centos 7의 head 명령 z 플래그

@dessert의 답변을 읽고 있습니다.https://askubuntu.com/a/990771/853133Ubuntu에서 cron을 사용하여 디렉터리에서 이전 백업 폴더를 삭제하는 방법에 대해 설명합니다. 주어진 명령은 다음과 같습니다:

find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 | sort -z | head -zn-6 | xargs -0 echo rm -rf

그러나 CentOs 7은 헤드 호출에서 z 플래그를 사용하는 것을 좋아하지 않습니다.

head: invalid option -- 'z'

CentOs7에 대한 솔루션이 있습니까?

나는 살펴보았다:"-z" 옵션을 사용할 수 없을 때 "head -z"에 해당하는 명령을 어떻게 실행합니까?나는 이 설명이 내 문제에 적용되지 않는다고 생각합니다. n보다 오래된 백업을 삭제하려는 경우 명령을 변경하는 방법을 모르겠습니다.

답변1

예, 지난 수십 년 동안 GNU 유틸리티는 NUL로 구분된 레코드에 대한 지원을 점차 추가해 왔습니다. GNU는 head -z비교적 새로운 것(2015)인 반면, GNU는 수십 년(1996) 또는 그보다 더 오랜 기간(1990) sort존재해 왔습니다 .-zxargs -0

여기서도 다음을 수행할 수 있습니다.

find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 |
  sort -rz | sed -z 1,6d | xargs -r0 echo rm -rf

-zGNU 추가는 sed최근(2012)이지만 head새로운 것은 아닙니다.

수십 년 동안 GNU 텍스트 유틸리티는 입력에서 NUL 바이트를 처리할 수 있었으므로 언제든지 다음을 수행할 수 있습니다.

find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 |
  tr '\0\n' '\n\0' |
  sort -r | tail -n +7 | 
  tr '\0\n' '\n\0' |
  xargs -r0 echo rm -rf

또는 언제든지 설치 zsh하고 실행할 수 있습니다.

echo rm -rf /BACKUPDIR/*(D/[1,-7])

( nglob 한정자는 숫자로 정렬되므로 10은 1과 2 사이가 아닌 9 뒤에 정렬됩니다.)

(위 날짜는 변경 로그에서 가져온 것이며 이러한 변경 사항이 포함된 공식 버전은 이후일 수 있습니다.)

관련 정보