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
'Programming > C++' 카테고리의 다른 글
ubuntu 20.04 설치 후 프로그램 실행 안되고 화면 잔상 생기는 현상 (0) | 2023.01.04 |
---|---|
ubuntu 파일 tar 압축풀기 - 특정 파일 제외 후 압축 풀기 (0) | 2023.01.03 |
[ubuntu] 실행파일 있는데 없다고 에러 메시지 발생 (No such file or directory) (0) | 2022.12.02 |
ubuntu 하위 폴더 내 모든 파일 사이즈 출력하고 정렬하는 방법 (0) | 2022.11.27 |
폴더 내 파일 일치 여부 확인하기. md5sum, find 명령어 조합 (0) | 2022.11.19 |
댓글