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

6059 단어 shell
xargs 는 유 닉 스 와 유 닉 스 운영 체제 에서 자주 사용 되 는 명령 입 니 다.매개 변수 목록 을 작은 블록 으로 변환 하여 다른 명령 에 전달 하여 매개 변수 목록 이 너무 긴 문 제 를 피 하 는 역할 을 합 니 다.
xargs 는 명령 에 인 자 를 전달 하 는 필터 이자 여러 명령 을 조합 하 는 도구 입 니 다.그것 은 필터 와 명령 을 처리 할 수 있 도록 데이터 흐름 을 충분 한 작은 블록 으로 나 누 었 다.일반적으로 xargs 는 파이프 나 stdin 에서 데 이 터 를 읽 지만 파일 의 출력 에서 도 데 이 터 를 읽 을 수 있 습 니 다.xargs 의 기본 명령 은 echo 입 니 다. 이 는 파 이 프 를 통 해 xargs 에 전달 하 는 입력 은 줄 바 꿈 과 공백 을 포함 하지만 xargs 의 처 리 를 통 해 줄 바 꿈 과 공백 은 빈 칸 으로 대 체 됩 니 다.
xargs 는 하나의 명령 의 출력 을 포착 하여 다른 명령 에 전달 할 수 있 는 강력 한 명령 입 니 다. 다음은 xargs 를 어떻게 효과적으로 사용 하 는 지 에 대한 실 용적 인 예 입 니 다.1. rm 으로 너무 많은 파일 을 삭제 하려 고 시도 하면 잘못된 정 보 를 얻 을 수 있 습 니 다./bin/rm Argument list too long. xargs 로 이 문 제 를 피 할 수 있 습 니 다.
?
1 find ~ -name ‘*.log' -print0 | xargs -0 rm -f
2./etc/아래 모든 *. conf 끝 에 있 는 파일 목록 을 얻 습 니 다. 몇 가지 다른 방법 으로 같은 결 과 를 얻 을 수 있 습 니 다. 아래 의 예 는 xargs 를 어떻게 사용 하 는 지 시범 일 뿐 입 니 다. 이 예 에서 xargs 는 find 명령 의 출력 을 ls - l 에 전달 합 니 다.
?
1 # find /etc -name "*.conf" | xargs ls –l
3. 다운로드 하고 싶 은 URL 이 많은 파일 이 있다 면 xargs 를 사용 하여 모든 링크 를 다운로드 할 수 있 습 니 다.
?
1 # cat url-list.txt | xargs wget –c
4. jpg 파일 을 모두 찾 아 압축 합 니 다.
?
1 # find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz
5. 모든 그림 파일 을 외부 하드디스크 드라이브 로 복사 
?
1 # 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 xargs sh -c 'emacs "$@"예 를 들 어 다음 명령:
 
   
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 {}

원본:http://www.jb51.net/article/44720.htm

좋은 웹페이지 즐겨찾기