기존의 .gz 파일을 제외하고 gzip을 사용하여 디렉토리의 파일을 압축하십시오.


19

gzip을 사용하여 압축 할 작업을 설정하려는 로그 디렉토리가 있습니다. 문제는 이미 압축 한 로그를 다시 압축하고 싶지 않다는 것입니다.

을 사용하려고 시도했지만 ls | grep -v gz | gzip작동하지 않는 것 같습니다.

이것을 할 수있는 방법이 있습니까? 기본적으로 .gz로 끝나지 않는 디렉토리의 모든 파일을 압축하고 싶습니다.

답변:


26

당신은 할 수 있습니다 :

gzip *

gzip은 이미 .gz 결말 이있는 파일을 건너 뛴다는 것을 알려줍니다 .
해당 메시지가 표시되지 않으면 다음을 사용하십시오.

gzip -q *

gzipstdin에서 압축 할 파일의 파일 이름을 읽지 않기 때문에 시도한 것이 작동 하지 않았습니다.

ls | grep -v gz | xargs gzip

gz파일 이름의 끝 부분 만이 아니라 패턴이있는 파일을 제외시킬 것입니다 .¹ 또한 ls공백, 줄 바꿈 등이있는 파일 이름이있는 경우 출력 구문 분석 이 위험하다는 점에 유의 해야합니다.

끝이 gzip있는 파일을 건너 뛰지 않고 더 깨끗한 솔루션 .gz은 하위 디렉토리의 압축되지 않은 파일도 처리합니다.

find .  -type f ! -name "*.gz" -exec gzip {} \;



¹ 언급 한 바와 izkata같이 : .gz이것을 개선하기 위해 혼자 사용하는 것은 효과가 없습니다. 당신은 사용해야합니다 grep -vF .gz또는 grep -v '\.gz$'. 여전히 ls'출력 처리의 위험이 있습니다.


1
"... 그러면 파일 이름의 일부와 일치하지 않을 수 있습니다"-grep $이므로 더 명확하게 사용하십시오. 그리고 당신은 탈출하지 않았다 .단지 파일을 제외 것, 그래서 어쨌든을 시작 으로을 gz(그들은 "전에 문자를 가지고 있지 않기 때문에 gz")
Izkata

1
@Izkata : 아니요, 이스케이프 처리되지 않은 점을 포함하고 파일 이름의 아무 곳에 나 "gz"가 오는 문자를 포함하여 이름이 3 개 이상의 문자로 구성된 모든 파일 $을 제외 ( -v) 하여 정규식을 고정하지 않는 정규식을 고정하지 않습니다 . 따라서 "gz"로 시작하는 이름을 가진 파일 이 포함됩니다 .
추후 공지가있을 때까지 일시 중지되었습니다.

1
@DennisWilliamson 내 마지막 의견은 명확하지 않았 gz으며, 이름의 어느 곳에서나 파일을 제외시킬 것입니다 (시작 제외). 어쨌든 고정하는 것이 좋습니다. 를 사용 $하지 않으면 .정규 표현식에서 의미하는 바를 모르므로 나머지 혼란스러운 의견을 읽습니다 .
Izkata
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.