bash script2023. 9. 8. 13:21

 

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

728x90
Posted by 반달가면