반달가면 이글루에서 백업 - http://bahndal.egloos.com/618357
find 명령으로 추려낸 파일들을 xargs 명령으로 넘겨서 해당 파일들에 대해 뭔가 작업을 하기 위한 스크립트를 만들 수 있다. 우선 find에 대한 기본적인 내용은 여기로, xargs에 대한 기본적인 내용은 여기로.
작업용 스크립트의 이름을 proc.sh라고 하자. 명령어 실행은 아래와 같은 형태가 될 것이다.
# my_file.txt 파일에 대한 작업
bash proc.sh my_file.txt
# find 명령으로 추려낸 여러 파일에 대한 작업
find ./ -type f | xargs proc.sh
# find와 grep 명령으로 .txt 파일만 추려낸 후 작업
find ./ -type f | grep "\.txt" | xargs proc.sh
find 명령으로 몇개의 파일이 넘어올 지 모르므로, proc.sh의 내용은 아래와 같이 작성해야 할 것이다. 아래의 예시에서는 단순히 파일명을 출력하는 작업을 하도록 작성했다.
echo "$#개의 파일을 처리합니다"
for file in $@
do
# 파일이 실제로 존재하는지 확인
if [[ ! -f $file ]]
then
echo "$file: 파일이 존재하지 않습니다. 건너뜁니다."
continue
fi
# 파일에 대한 작업: 파일명 출력
echo "파일명: $file"
done
for 반복문에 있는 "$@" 변수는 인자(argument) 전체를 의미한다. 통상 첫번째 인자는 $1, 두번째 인자는 $2, 이런식으로 사용하지만 몇개의 인자가 있을지 모르므로 전체를 나타내는 $@ 사용. "$#" 변수는 인자의 수를 나타낸다.
한가지 유의할 점이 있는데, 파일명에 공백(space)이 포함되지 않아야 한다. for 반복문에서 각 항목의 구분자가 공백이기 때문이다.
'bash script' 카테고리의 다른 글
[bash: sed] 출력 또는 제거할 범위를 문자열 패턴으로 지정하기 (0) | 2023.09.15 |
---|---|
[bash: awk] 각 항목별 합계 계산 (0) | 2023.09.15 |
[bash: grep] 파일에 저장된 여러개의 검색어를 포함 또는 제외한 내용 출력하기 (0) | 2023.09.08 |
[bash: stat] 현재 파일이 전송되고 있는 중인지 판단하기 - 2 (0) | 2023.09.08 |
[bash: awk] 특정 필드(field)의 값이 있는 경우, 또는 없는 경우 판별하기 (0) | 2023.09.08 |