[bash: find, xargs, for] find 명령으로 추려낸 여러 파일에 대해 같은 작업을 하기 위한 스크립트 리눅스 bash script

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 반복문에서 각 항목의 구분자가 공백이기 때문이다.



덧글

댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.

Google Analytics


B-Side


adsense(w160_h600)2

통계 위젯 (화이트)

39703
2864
1813372

ad_widget_2