![지정된 패턴을 따르는 특정 파일만 압축을 푸는 방법은 무엇입니까?](https://linux55.com/image/130055/%EC%A7%80%EC%A0%95%EB%90%9C%20%ED%8C%A8%ED%84%B4%EC%9D%84%20%EB%94%B0%EB%A5%B4%EB%8A%94%20%ED%8A%B9%EC%A0%95%20%ED%8C%8C%EC%9D%BC%EB%A7%8C%20%EC%95%95%EC%B6%95%EC%9D%84%20%ED%91%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
배쉬를 사용하세요.
다음 파일이 포함된 디렉터리 D가 있다고 가정합니다.
20170301:00.out.gz
20170301:01.out.gz
...
20170302:01.out.gz
20170302:02.out.gz
etc.
이러한 파일은 "yyyymmdd:hh"(연도, 월, 일, 시간) 패턴을 따릅니다. Bash를 사용하여 이러한 파일 중 일부의 압축을 풀고 싶지만 아직 어떻게 해야 할지 모르겠습니다.
파일의 경우 물론 "gunzip -c yyyymmdd:hh.out.gz"를 사용할 수 있지만 각 파일을 하드코딩하는 것은 약간 불필요한 것 같습니다...
예를 들어 3월 7일부터 3월 14일까지의 파일만 추출하고 싶다면 어떻게 해야 하나요?
답변1
Bash를 사용하고 있으므로 다음을 사용할 수 있습니다.버팀대 확장:
gunzip {20170307..20170314}*.gz
파일 내용만 보려면 -c
에서 확인하세요 gunzip
.
순서대로 파일이 손실되면 gunzip
해당 파일에 대해 불평하지만 여전히 모든 파일을 처리합니다.예순서대로 존재합니다. 이 경우 shell 옵션이 set 이면 확장 자체가 실패 failglob
하지만 이는 Bash의 기본값이 아니라는 점도 주목할 가치가 있습니다.
답변2
gunzip -c
실제로 압축을 풀지 않고 내용을 표준 출력에만 기록합니다.
귀하의 목적에 따라:
for a in {07..14}; do gunzip -c '201703'$a':02.out.gz'; done
답변3
find
방법:
find . -maxdepth 1 -type f -regextype posix-egrep \
-regex ".*/201703(0[7-9]|1[0-4]):[0-5][0-9]\.out\.gz$" -exec gunzip {} \;