답변:
당신은 할 수 있습니다 :
gzip *
gzip은 이미 .gz
결말 이있는 파일을 건너 뛴다는 것을 알려줍니다 .
해당 메시지가 표시되지 않으면 다음을 사용하십시오.
gzip -q *
gzip
stdin에서 압축 할 파일의 파일 이름을 읽지 않기 때문에 시도한 것이 작동 하지 않았습니다.
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
'출력 처리의 위험이 있습니다.
$
을 제외 ( -v
) 하여 정규식을 고정하지 않는 정규식을 고정하지 않습니다 . 따라서 "gz"로 시작하는 이름을 가진 파일 이 포함됩니다 .
gz
으며, 이름의 어느 곳에서나 파일을 제외시킬 것입니다 (시작 제외). 어쨌든 고정하는 것이 좋습니다. 를 사용 $
하지 않으면 .
정규 표현식에서 의미하는 바를 모르므로 나머지 혼란스러운 의견을 읽습니다 .
$
이므로 더 명확하게 사용하십시오. 그리고 당신은 탈출하지 않았다.
단지 파일을 제외 것, 그래서 어쨌든을 시작 으로을gz
(그들은 "전에 문자를 가지고 있지 않기 때문에gz
")