본문 바로가기
Programming/C++

linux - bash shell script 폴더 내 모든 압축파일 유효성 확인(validation)

by AUTORI 2022. 12. 21.

bash shell script를 사용하여 폴더 내 확장자가 압축파일 형태인 tar.gz, zip 파일을 모두 찾고, 각각의 파일에 대해 압축파일 형태 유효성 검사를 하고 싶었다. 각 단계별로 사용한 명령어에 대해 정리해 보았다.

 

1. shell script 절대 경로 얻어오기.

 

shell script 를 수행한 위치에 대한 절대 경로를 가져와 PATH 변수에 저장한다.

 

CUR_PATH=$( cd "$(dirname "$0")" ; pwd )

 

 

2. 압축파일 검색하기.

 

확장자가 zip, tar.gz 두 가지 형태 파일을 모두 찾고 싶었다. find 명령어를 사용하여 1번에서 얻어온 절대 경로 위치에서 파일 검색을 하였다. 두 가지 패턴을 찾기 위해 -o 옵션( OR를 의미)을 사용하였다. 검색 결과는 FIND_RESULT 변수에 저장하였다.

 

FIND_RESULT=`find $CUR_PATH \( -name "*.zip" -o -name "*.tar.gz" \)`

 

 

3. gzip 을 사용한 압축파일 유효성 검사 하기.

 

추출한 파일 결과를 for 구문을 통해 구별하였다. 각각의 파일들은 gzip -t 옵션을 사용하여 유효성 검사를 진행하였다. 처음에는 gzip -t 결과 값을 변수(RESULT)에 저장 후 출력하니 error값이 나오지 않았다.  명령어 마지막에 2>&1 추가해주면 저장된 error 결과 값을 출력할 수 있다.  에러 출력 시, \t  (tap 간격 출력)을 사용하기 위해서 echo -e 옵션을 사용하였다.

 

ARRAY_FILES=$(echo $FIND_RESULT )
for tmp in $ARRAY_FILES
do
	RESULT=`gzip -t -c $tmp  2>&1`    
	if [[ $RESULT == "" ]]; then
		echo $tmp " : OK"
	else
		echo $tmp " : error"
		echo -e "\t" $RESULT
	fi
done

 

4. bash shell 적용 및 완성본

 

아래는 최종 bash shell 스크립트 완성본이다.

 

#!/bin/bash
CUR_PATH=$( cd "$(dirname "$0")" ; pwd )

FIND_RESULT=`find $CUR_PATH \( -name "*.zip" -o -name "*.tar.gz" \)`

ARRAY_FILES=$(echo $FIND_RESULT )
for tmp in $ARRAY_FILES
do
	RESULT=`gzip -t -c $tmp  2>&1`    
	if [[ $RESULT == "" ]]; then
		echo $tmp " : OK"
	else
		echo $tmp " : error"
		echo -e "\t" $RESULT
	fi
done

 

 

https://www.lesstif.com/lpt/linux-find-43844055.html

https://codechacha.com/ko/how-to-get-path-of-bash-script/

https://man7.org/linux/man-pages/man1/find.1.html

 

댓글