패턴을 기반으로 여러 파일을 압축

패턴을 기반으로 여러 파일을 압축

gzip, tar 등을 사용하여 패턴을 기반으로 여러 파일을 압축하는 방법을 알고 싶습니다. 즉, 다음 파일이 있는 경우:

server_regTCA.log.2021.02.12
server_regTCA.log.2021.02.13
server_regTCA.log.2021.02.14
server_regTCA.log.2021.02.15
server_regTCA.log.2021.02.16
server_regTCA.log.2021.02.17
server_regTCA.log.2021.02.18

나는 다음과 같은 것을하고 싶다gzip -9 server_regTCA.log.2021.02.[12-15]

감사해요

답변1

어떤 쉘을 사용하고 있는지 언급하지 않았습니다. 이것은 모드 확장을 제어하는 ​​쉘입니다.

사용하는 경우 bash중괄호 확장을 사용할 수 있습니다.

gzip server_regTCA.log.2021.02.{12..15}

중괄호 확장이 없는 간단한 셸을 사용하는 경우 sh단일 문자 패턴만 일치시킬 수 있습니다.

gzip server_regTCA.log.2021.02.1[2-5]

두 경우 모두 명령 앞에 접두사를 붙여서 echo실제로 실행하지 않고도 쉘이 패턴을 확장하는 방법을 확인할 수 있습니다 gzip.

"이전" 파일을 압축하려는 경우 더 좋은 방법이 있을 수 있습니다. 예를 들어, 다음은 1년(366일) 이상 전에 마지막으로 변경된 나열된 파일 이름의 모양과 일치하는 모든(압축되지 않은) 파일을 압축합니다.

find ... -type f -mtime +365 -name 'server_regTCA.log.????.??.??' -exec gzip {} +

(각각 ?하나의 문자와 일치합니다. 압축 파일에는 .gz패턴과 일치하지 않는 접미사가 있습니다.)

답변2

그리고 zsh:

gzip -9 -- *.log.2021.02.<12-15>

또는 gzip임의의 날짜 범위 내의 파일:

start=2021.01.31 end=2022.03.28
gzip -9 -- *.log.*(^e['[[ ${REPLY##*.log.} < $start || ${REPLY##*.log.} > $end ]]'])

(모든 *.log.*파일에 -style 접미사가 있다고 가정합니다. 그렇지 않은 경우 YYYY-MM-DD예를 들어 더 명시적으로 일치하도록 만들 수 있습니다.)*.log.[0-9][0-9][0-9][0-9].[0-9][0-9].[0-9][0-9]

관련 정보