로그 파일을 처리하는 쉘 스크립트를 작성 중입니다.때때로파일이 압축되었을 수 있으며 파일 이름에 적절한 접미사가 있습니다.
이 경우 파일 처리 파이프라인에 압축 풀기를 추가하고 싶습니다.
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.