파일의 압축을 자동으로 풀기 위해 sh에 코드를 작성하는 방법은 무엇입니까?

파일의 압축을 자동으로 풀기 위해 sh에 코드를 작성하는 방법은 무엇입니까?

로그 파일을 처리하는 쉘 스크립트를 작성 중입니다.때때로파일이 압축되었을 수 있으며 파일 이름에 적절한 접미사가 있습니다.

이 경우 파일 처리 파이프라인에 압축 풀기를 추가하고 싶습니다.

case "$file" in:
*.gz)  READER="gzip -cd" ;;
*.bz2) READER="bzip2 -cd" ;;
...
*)     READER="cat" ;;
esac
$READER < $file | processing

이게 효과는 있지만 파일 압축을 풀 때 cat쓸데없이 호출되기 때문에 마음에 들지 않습니다. 이 경우 파일을 직접 열고 싶습니다.

< $file processing

일부를 사용 eval하고 만들어 보았 으나 엉망이 되었습니다.|$READER처리평가판으로서의 파이프도 작동합니다 ...

어떤 제안이 있으십니까?

답변1

제가 제안하는 바는 고양이의 원치 않는 사용("UUOC")에 대해 걱정할 이유가 없다는 것입니다.

이 경우에는 "쓸모없는" 목적도 아닙니다. cat특별한 경우를 처리하기 위해 추가 코드 줄을 작성할 필요가 없도록 기본 필터로 매우 유용한 목적을 제공합니다.

불필요한 복잡성은 UUOC보다 더 나쁜 프로그래밍 "범죄"입니다.

그런데 이것이 cat정말로 귀찮 다면 ucat도구 세트를 사용 unp하고 바퀴를 재발명하는 것을 피할 수 있습니다. unp홈 페이지는 없는 것 같지만 최소한 데비안과 우분투용으로 패키지되어 있습니다(현재 데비안 개발자 Eduard Block이 관리하고 있습니다).

Package: unp
Version: 2.0~pre7+nmu1
Installed-Size: 133
Maintainer: Eduard Bloch <[email protected]>
Architecture: all
Suggests: bzip2, unrar | unrar-free, xdms, p7zip | p7zip-full, unzip, cabextract,
orange
Description-en: unpack (almost) everything with one command
 unp is a small perl script which makes extraction of any archive files
 a bit easier. It support several compressors and archiver programs,
 chooses the right one(s) automatically and extracts one or more files
 in one go.
 .
 You may also want to install some non-free packages like "unace-nonfree",
 "unrar-nonfree" and "lha" to extract archives of these types.

관련 정보