콘텐츠로 건너뛰기

셸 스크립트에서 for 문을 활용한 파일 리스트 처리 방법



셸 스크립트에서 for 문을 활용한 파일 리스트 처리 방법

셸 스크립트에서 for 문을 사용하여 특정 디렉토리 내의 파일을 처리하는 방법에 대해 알아보자. 파일 내용이 특정 형식으로 되어 있을 때, 이를 효율적으로 수정하고 정렬하는 과정을 다룬다.

 

👉 ✅ 상세 정보 바로 확인 👈

 

파일 리스트 읽기

일상적인 작업 중 하나는 특정 디렉토리 안에 있는 파일의 리스트를 가져오는 것이다. 예를 들어, 웹서버의 특정 디렉토리인 /var/www//searchdir에 있는 파일을 대상으로 할 수 있다. 이 디렉토리 안에는 다양한 파일들이 존재하며, 이 파일들의 이름을 읽어와야 한다.



파일 이름 가져오기

파일 이름을 가져오기 위해 for 문을 사용한다. 다음 코드는 지정된 디렉토리의 모든 파일을 순회하며 각 파일의 경로를 출력하는 간단한 예시이다.

sh
searchdir=/var/www//searchdir
for entry in $searchdir/*
do
echo "$entry"
done

위의 코드에서 *는 디렉토리 내의 모든 파일을 의미하며, 각 파일의 경로가 entry 변수에 저장된다. 이처럼 간단한 구조로 파일명을 가져올 수 있다.

파일 내용 수정하기

파일 내용을 수정하기 위해서는 먼저 각 파일의 내용을 읽어와야 한다. 해당 파일의 내용은 특정 형식으로 되어 있으며, 예를 들어 “날짜 내용”의 형식으로 저장되어 있을 수 있다. 이때, sed 명령어를 사용하여 특정 문자열을 다른 문자열로 치환하는 작업을 수행할 수 있다.

sh
for entry in $searchdir/*
do
filename="$entry"
sed 's/Sep/\t09\t/g' "$filename" > $searchdir/tmp
sed -i 's/Oct/\t10\t/g' $searchdir/tmp
sed -i 's/Dec/\t12\t/g' $searchdir/tmp
done

이 코드에서는 Sep, Oct, Dec와 같은 문자열을 각각 숫자로 치환하여 임시 파일에 저장한다. sed 명령어의 -i 옵션은 원본 파일을 직접 수정하는 데 사용되며, s/old/new/g 형식으로 문자열을 변경한다.

 

👉 ✅ 상세 정보 바로 확인 👈

 

파일 정렬하기

파일 내용이 수정된 후, 이를 정렬하는 과정이 필요하다. sort 명령어를 사용하여 내용을 정렬할 수 있으며, 이를 위해서는 먼저 중복된 라인을 제거하는 것이 중요하다. 다음 코드는 이를 수행하는 방법을 보여준다.

sh
sort -u $searchdir/tmp | sort -n -k 4,4 -k 3,3 -k 2,2 -k 5,5 > $filename.sorted

위의 명령어에서 sort -u는 중복된 라인을 제거하고, 두 번째 sort 명령어는 숫자 정렬을 수행한다. 필드별 우선순위를 설정하기 위해 -k 옵션을 사용하여 각 필드를 기준으로 정렬한다.

파일 처리의 유의점

파일을 처리하는 과정에서 주의할 점은 다음과 같다. 첫째, 파일 이름에 공백이 포함될 수 있으므로, 이를 처리하기 위해서는 파일 경로를 항상 큰따옴표로 감싸야 한다. 둘째, 파일이 많을 경우, 성능을 고려하여 임시 파일을 사용하는 것이 좋다. 마지막으로, 모든 파일을 일괄 처리할 경우 에러가 발생할 수 있으므로, 각 파일 처리 후 상태를 점검하는 것이 필요하다.

결론

셸 스크립트에서 for 문을 활용하여 디렉토리 내 파일을 읽고, 이들의 내용을 수정하고 정렬하는 방법에 대해 살펴보았다. 이 과정을 통해 파일 관리의 효율성을 높일 수 있으며, 반복적인 작업을 자동화하는 데 도움이 된다. 각 단계를 정확히 이해하고 실행함으로써, 원하는 결과를 얻는 것이 가능하다.