linux 셸 스 크 립 트 학습 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
EXAMPLESfind /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 {}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
셸 스 크 립 트 (변수)변수: 특정한 문자열 로 고정 되 지 않 은 내용 을 표시 합 니 다. 1. 사용자 정의 변수 사용자 정의 변수: 변수 이름 = 변수 값 변수 이름 은 알파벳 이나 밑줄 로 시작 해 야 합 니 다. 대소 문자 ip ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.