linux 셸 스 크 립 트 학습 xargs 명령 사용 상세 설명

xargs 는 명령 에 인 자 를 전달 하 는 필터 이자 여러 명령 을 조합 하 는 도구 입 니 다.그것 은 필터 와 명령 을 처리 할 수 있 도록 데이터 흐름 을 충분 한 작은 블록 으로 나 누 었 다.일반적으로 xargs 는 파이프 나 stdin 에서 데 이 터 를 읽 지만 파일 의 출력 에서 도 데 이 터 를 읽 을 수 있 습 니 다.xargs 의 기본 명령 은 echo 입 니 다.이 는 파 이 프 를 통 해 xargs 에 전달 하 는 입력 은 줄 바 꿈 과 공백 을 포함 하지만 xargs 의 처 리 를 통 해 줄 바 꿈 과 공백 은 빈 칸 으로 대 체 됩 니 다.
xargs 는 하나의 명령 의 출력 을 포착 하여 다른 명령 에 전달 할 수 있 는 강력 한 명령 입 니 다.다음은 xargs 를 어떻게 효과적으로 사용 하 는 지 에 대한 실 용적 인 예 입 니 다.
1.rm 으로 너무 많은 파일 을 삭제 하려 고 시도 하면 잘못된 정 보 를 얻 을 수 있 습 니 다./bin/rm Argument list too long.xargs 로 이 문 제 를 피 할 수 있 습 니 다.

find ~ -name ‘*.log' -print0 | xargs -0 rm -f
2./etc/아래 모든*.conf 끝 에 있 는 파일 목록 을 얻 습 니 다.몇 가지 다른 방법 으로 같은 결 과 를 얻 을 수 있 습 니 다.아래 의 예 는 xargs 를 어떻게 사용 하 는 지 시범 일 뿐 입 니 다.이 예 에서 xargs 는 find 명령 의 출력 을 ls-l 에 전달 합 니 다.

# find /etc -name "*.conf" | xargs ls Cl
3.다운로드 하고 싶 은 URL 이 많은 파일 이 있다 면 xargs 를 사용 하여 모든 링크 를 다운로드 할 수 있 습 니 다.

# cat url-list.txt | xargs wget Cc
4.jpg 파일 을 모두 찾 아 압축 합 니 다.

# find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz
5.모든 그림 파일 을 외부 하드디스크 드라이브 로 복사

# ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory
EXAMPLES
find /tmp -name core -type f -print | xargs /bin/rm -f
Find files named core in or below the directory /tmp and delete them. Note that this will work incorrectly if there are any filenames containing newlines or spaces.
find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
Find files named core in or below the directory /tmp and delete them, processing filenames in such a way that file or directory names containing spaces or newlines are correctly handled.
find /tmp -depth -name core -type f -delete
Find files named core in or below the directory /tmp and delete them, but more efficiently than in the previous example (because we avoid the need to use fork(2) and exec(2) to launch rm and we don't need the extra xargs process).
cut -d: -f1 < /etc/passwd | sort | xargs echo
Generates a compact listing of all the users on the system.
xargs sh -c 'emacs "$@" < /dev/tty' emacs
Launches the minimum number of copies of Emacs needed, one after the other, to edit the files listed on xargs' standard input. This example achieves the same effect as BSD's -o option, but in a more flexible and portable way.
예 를 들 어 다음 명령:

rm `find /path -type f`
path 디 렉 터 리 에 파일 이 너무 많 으 면'매개 변수 목록 이 너무 길 어서'오류 가 발생 하여 실행 할 수 없습니다.그러나 xargs 로 바 꾼 후에 문 제 는 바로 해결 되 었 다.

find /path -type f -print0 | xargs -0 rm
이 예 에서 xargs 는 find 에서 발생 하 는 긴 문자열 파일 목록 을 여러 개의 문자열 로 나 눈 다음 각 문자열 에 rm 을 호출 합 니 다.-print 0 은 출력 을 null 로 구분 합 니 다(-print 는 줄 바 꾸 기 를 사용 합 니 다).-0 은 입력 을 null 로 구분 하 는 것 을 표시 합 니 다.이렇게 하면 다음 과 같이 find 명령 을 사용 하 는 것 보다 효율 이 높다.

find /path -type f -exec rm '{}' \;
xargs 명령 은 파이프 조작 자 에 바짝 붙 어야 합 니 다.표준 입력 을 주요 소스 데이터 흐름 으로 하고 stdin 을 사용 하 며 명령 행 인 자 를 제공 하여 다른 명령 을 수행 해 야 합 니 다.예 를 들 어:

command | xargs
실례 1 을 사용 하여 여러 줄 의 입력 을 한 줄 의 출력 으로 변환 합 니 다.

amosli@amosli-pc:~/learn$ cat example.txt
1 2 3 4 5
6 7
8
amosli@amosli-pc:~/learn$ cat example.txt | xargs
1 2 3 4 5 6 7 8
인 스 턴 스 응용 2,한 줄 의 입력 을 여러 줄 의 출력 으로 변환 합 니 다:

amosli@amosli-pc:~/learn$ cat example.txt | xargs -n 2
1 2
3 4
5 6
7 8
빈 칸 은 기본 경계 문자 입 니 다.-n 은 줄 마다 몇 개의 인 자 를 표시 합 니 다.
-d 매개 변 수 를 사용 하여 파 라 메 터 를 구분 할 수 있 습 니 다.다음 과 같 습 니 다.

amosli@amosli-pc:~/learn$ echo "splitXhiXamosliXsplit" | xargs -d "X" -n 1
split
hi
amosli
split
인 스 턴 스 응용 3,stdin 읽 기,포맷 매개 변 수 를 명령 에 전달 합 니 다.

# echo #
amosli@amosli-pc:~/learn$ cat cecho.sh
echo $*'#'

# 1:
amosli@amosli-pc:~/learn$ sh cecho.sh arg1
arg1#
amosli@amosli-pc:~/learn$ sh cecho.sh arg2
arg2#
amosli@amosli-pc:~/learn$ sh cecho.sh arg3
arg3#

# 2:
amosli@amosli-pc:~/learn$ sh cecho.sh arg1 arg2 arg3
arg1 arg1 arg2 arg3#

# 1、2, xargs , vi args.txt, :
amosli@amosli-pc:~/learn$ cat args.txt
arg1
arg2
arg3
# :
amosli@amosli-pc:~/learn$ cat args.txt | xargs -n 1
arg1
arg2
arg3
amosli@amosli-pc:~/learn$ cat args.txt | xargs -n 2 sh cecho.sh
arg1 arg2#
arg3#
# :
amosli@amosli-pc:~/learn$ cat args.txt | xargs sh cecho.sh ;
arg1 arg2 arg3#

필요 3,어떻게 파 라 메 터 를 고정된 명령 줄 에 삽입 합 니까?다음 과 같다.

amosli@amosli-pc:~/learn$ sh cecho.sh -p args1 -1
-p args1 -1#
amosli@amosli-pc:~/learn$ sh cecho.sh -p args2 -1
-p args2 -1#
amosli@amosli-pc:~/learn$ sh cecho.sh -p args3 -1
-p args3 -1#
xargs 솔 루 션 사용 하기:

amosli@amosli-pc:~/learn$ cat args.txt | xargs -I {} sh cecho.sh -p {} -1
-p arg1 -1#
-p arg2 -1#
-p arg3 -1#

#-I {} , {} stdin , -I ,

인 스 턴 스 응용 4,find 와 결합 하여 xargs 사용
앞에서 예 를 들 었 습 니 다.여기 서 주의해 야 할 것 은 파일 이름 의 경계 부 호 는 문자 null 로 출력 을 구분 해 야 합 니 다.다음 과 같 습 니 다.그렇지 않 으 면 파일 을 잘못 삭제 할 수 있 습 니 다.

amosli@amosli-pc:~/learn$ find . -type f -name "*test*.txt" -print0 | xargs -0 rm -f
기타:

cat file | ( while read arg; do cat $arg; done )
cat file | xargs -I {} cat {}

좋은 웹페이지 즐겨찾기