2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

xargs로 팀원들과 공유할 수 있는 스크립트 예시는?

_____
Q1) xargs란 무엇이며 왜 쓰나요?
A1)
xargs는 표준 입력으로 받은 문자열을 명령 인자(argument)로 변환해 반복 처리할 때 사용합니다.
장점
- 명령의 인자 제한(ARG_MAX) 회피
- 병렬 처리 및 배치 처리 손쉬움
- find·grep 등과 조합해 효율적 파일·라인 단위 작업

Q2) 기본 사용법 예시
A2)
1) echo로 받은 숫자를 순서대로 printf에 전달
echo “1 2 3” | xargs -n1 printf “Number: %s\n”
출력:
Number: 1
Number: 2
Number: 3

2) 파일 목록을 rm에 넘겨 한꺼번에 삭제
find ./logs -name “*.log” | xargs rm -f

Q3) 파일명에 공백·특수문자가 있을 때
A3)
-find와 함께 `-print0`, xargs의 `-0`을 사용하면 NUL 문자로 구분
find ./data -type f -name “*.txt” -print0 \
| xargs -0 -I{} echo “processing '…{}'”
-`-I{}` 옵션은 각 항목마다 자리에 치환

Q4) 배치 사이즈 조절(-n) & 병렬 처리(-P)
A4)
-n M: 한 번에 M개 인자를 인자로 넘김
-P N: 동시에 N개 프로세스를 실행
예) 이미지 1000개를 10개씩 4개 병렬로 리사이징
ls *.jpg \
| xargs -n10 -P4 -I{} \
mogrify -resize 800x600 {}

Q5) 실패 시 중단 또는 무시 옵션
A5)
-r(–no-run-if-empty): 입력이 없으면 명령 실행 안 함
-x(–exit): 최대 인자 개수 미달 시에도 실행 강제(종료 방지)
-p: 실행 전 인터랙티브 확인
예)
find ./temp -type f -print0 \
| xargs -0 -r rm -v

Q6) SSH 원격 명령과 조합
A6)
원격 서버에 여러 파일을 동시에 전송하거나 명령 실행
1) SCP로 파일 복사
find ./out -name “*.zip” -print0 \
| xargs -0 -n1 -P4 -I{} scp {} user@host:/backup/
2) Remote xargs
printf “a.txt\nb.txt\n” \
| xargs -I{} ssh host “gzip -c {} > {}.gz”

Q7) 로그 남기기 & 에러 핸들링
A7)
1) 표준 출력·표준 에러를 파일로 리다이렉트
find ./data -print0 \
| xargs -0 -n1 -P2 bash -c 'process "$0" >> out.log 2>> err.log'
2) 개별 실패 감지
find ./jobs -print0 \
| xargs -0 -n1 -P3 bash -c '\
job="$0"; job "$job" && echo "$job SUCCESS" \
|| echo "$job FAIL" >> fail.lst'

Q8) dry-run(–no-exec) 스타일 테스트
A8)
실제 실행 전 인자를 확인하고 싶을 때 `echo` 활용
find ./scripts -name “*.sh” \
| xargs -n1 echo bash bash script1.sh bash script2.sh ...

Q9) 스크립트 공유용 템플릿 예시
A9)
아래 내용을 team_xargs.sh로 저장 후 실행 권한(chmod +x) 부여 후 사용하세요.

!/usr/bin/env bash
team_xargs.sh – 디렉터리 내 특정 확장자 파일을 병렬 처리
DIR="${1:-.}" 대상 디렉터리(기본 .)
EXT="${2:-txt}" 확장자(기본 txt)
WORKER="${3:-4}" 병렬 프로세스 수
BATCH="${4:-5}" 배치 사이즈
LOG="process.log" 로그 파일

echo "Start at $(date)" >> "$LOG"
find "$DIR" -type f -name "*.${EXT}" -print0 \
| xargs -0 -n"$BATCH" -P"$WORKER" -I{} bash -c '\
echo "[`date '+%F %T'`] Processing {}" >> "'"$LOG"'"; \
my_command "{}" >> "'"$LOG"'" 2>&1'

echo "End at $(date)" >> "$LOG"

사용법 예시:
./team_xargs.sh ./docs pdf 6 10

Q10) 유의사항
A10)
- ARG_MAX 제한 해소 목적이지만, 너무 큰 병렬화는 시스템 부하 초래
- 특수문자·공백 처리 시 반드시 `-print0` / `-0` 사용
- 커맨드 치환(`-I`) 과 쉘 확장 간 충돌 주의
- 실사용 전 `echo` dry-run으로 검증 권장
`xargs`는 Linux 및 Unix-like 시스템에서 명령줄 입력을 처리하는 데 유용한 도구입니다.

파일이나 표준 입력에서 받은 데이터를 읽어 다른 명령에 인수로 전달할 수 있습니다.

팀원들과 공유할 수 있는 `xargs` 사용 예제를 만들어 보겠습니다.

예제: 파일에서 URL을 읽어 `wget`으로 다운로드하기 이 스크립트는 텍스트 파일에 나열된 여러 웹사이트의 URL을 읽어 `wget` 명령을 통해 다운로드합니다.

1. URLs.txt : 다운로드할 URL 목록을 포함한 파일 ``` https://www.example.com https://www.example.org https://www.example.net ```

2. 다운로드 스크립트 (download.sh) : ```bash !/bin/bash URLs.txt에서 URL을 읽고 wget으로 다운로드합니다.

if [ -f URLs.txt ]; then cat URLs.txt | xargs -n 1 wget else echo "URLs.txt 파일이 존재하지 않습니다.

" fi ```

3. 스크립트 사용법 : - `download.sh` 파일을 작성한 후 실행 권한을 부여합니다.

```bash chmod +x download.sh ``` - 스크립트를 실행하여 URL로부터 파일을 다운로드합니다.

```bash ./download.sh ``` 설명 - `cat URLs.txt`: `URLs.txt` 파일을 출력합니다.

- `xargs -n 1 wget`: 각 URL을 하나씩 `wget` 명령에 전달하여 다운로드합니다.

- `-n 1`: 각 호출에 대해 하나의 인수만 사용하라는 의미입니다.

공유 방법 이 스크립트를 팀원들에게 공유하기 위해 다음과 같은 방법을 사용할 수 있습니다: 1. Git 리포지토리 : 해당 스크립트를 Git 리포지토리에 추가하여 팀원이 쉽게 클론하거나 풀할 수 있도록 합니다.



2. 클라우드 스토리지 : Google Drive, Dropbox 등의 클라우드 스토리지 서비스를 통해 스크립트를 공유합니다.



3. 이메일 : 스크립트 파일을 이메일에 첨부하여 팀원들에게 직접 보냅니다.



4. 샌드박스 환경 : 코드 샌드박스나 공유 가능한 개발 환경을 통해 팀원들이 쉽게 접근할 수 있도록 합니다.

이 예제는 팀원들이 특정 URL로부터 데이터를 다운로드할 필요가 있을 때 유용합니다.

각자 다른 URL을 추가하여 사용할 수도 있습니다.

작성자: 정수현 [비회원] | 작성일자: 1년 전 2025-04-17 07:21:33
조회수: 134 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.