linux 셸 스 크 립 트 학습 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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ZSH에서 물고기까지ZSH는 수년 동안 내 기본 셸이었습니다. 이제 몇 달 동안 사용하면서 ZSH 구성에 대해 몇 가지 사항을 발견했습니다. 우리는 을 제공하는 시스템과 더 빨리 상호 작용하는 경향이 있습니다. 내.zshrc 구성에는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.