문제는 일부 데이터베이스 덤프가 압축되어 있거나 일반 텍스트라는 것입니다. 파일 확장자 등은 아무런 차이가 없습니다. zcat
압축되지 않은 파일에 사용하면 출력 대신 오류가 발생합니다.
cat
입력 유형을 감지할 만큼 똑똑한 또 다른 도구가 있습니까 ?
답변1
해당 -f
옵션을 추가하면 됩니다.
$ echo foo | tee file | gzip > file.gz
$ zcat file file.gz
gzip: file: not in gzip format
foo
$ zcat -f file file.gz
foo
foo
(GNU(또는 최신 BSD와 같은 GNU 에뮬레이션)가 아니고 파일에 대해서만 알고 있다면 gzip -dcf
대신 사용하십시오.)zcat -f
zcat
.Z
답변2
zgrep
이식 가능하고 간단한 제안은 대신 을 사용 zcat
하고 각 행과 일치하는 검색 패턴만 사용하는 것입니다.
zgrep $ some-file
zcat
와 달리 zgrep
압축되지 않은 파일을 쉽게 처리합니다. 남자 zgrep에서:
zgrep - search possibly compressed files for a regular expression
답변3
GNU를 사용하면 gzip
그것을 할 수 있습니다 zcat file 2> /dev/null || cat file
. 이것은 POSIX 표준이 아니며 BSD에 적용되지 않습니다 . 모든 ped 파일이 확장자를 갖도록 gzip
시스템을 수정해야 합니다 (물론 일반 텍스트 파일에는 를 포함한 모든 확장자가 있을 수 있습니다 ).gzip
.gz
.gz
답변4
Bash의 또 다른 옵션:
for filename in *;do #Replace with your actual loop
case $filename in
*.gz) gunzip <"$filename";;
*) cat "$filename";;
esac
done