Raspberry Pi_Kor_10.8.1 “xargs” 명령


Published Book on Amazon


All of IOT

Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 1

All of IOT

Starting with the Latest Raspberry Pi from Beginner to Advanced – Volume 2


출판된 한글판 도서


최신 라즈베리파이(Raspberry Pi)로 시작하는 사

물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (상)

최신 라즈베리파이(Raspberry Pi)로 시작하는 사

물인터넷(IOT)의 모든 것 – 초보에서 고급까지 (하)


Original Book Contents


10.8   입력 및 출력 조정 명령

 

10.8.1  "xargs" 명령

 

이 명령은 앞에서 실행된 명령의 출력을 다음 명령의 argument input으로 사용할 수 있도록 해준다.

 

[명령 형식]

xargs  [option]   exec-command

 

[명령 개요]

    실행된 명령의 출력을 다음 명령의 argument로 사용할 수 있도록 한다.

    user 권한    -- 일반 user.

 

[상세 설명]

    xargs 명령 이전에 다른 명령이 없으면 표준입력에서 자료를 읽어서 실행 명령의 argument로 넘겨준다..

    통상적으로 사용할 때는 pipe 명령( | )을 이용하여 이전에 실행한 명령의 결과를 받아서 다음 명령으로 넘겨준다. 아래의 예를 설명해 보자.  

ex) find /tmp -name core -type f print0   |   xargs rm -f

앞에서 find 명령이 실행되고, 뒤에는 rm 명령이 있다. 이 명령은 앞의 find 명령에서 나오는 결과를 뒤의 rm 명령으로 전달해 주기 위해서 xargs 명령을 사용한 것이다. 전체적인 효과는  /tmp directory 속에서 파일 이름에 "core"가 있는 모든 파일을 찾아서 삭제하라는 의미이다.

    xargs를 통해서 전달되는 각각의 자료에 대해서 exec-command가 실행된다. 따라서 argument의 개수가 하나 이상이면 exec-command도 여러 번 실행된다는 것을 의미한다

 

[주요 Option]

--arg-file=file    -a file

Read items from file instead of standard input.  If  you  use  this option,  stdin remains unchanged when commands are run.  Otherwise, stdin is redirected from /dev/null.

 

 

[사용 Example]

먼저 "pi" 계정의 "testdata" directory "customer_list.txt" 파일과 "customer_product.txt" 파일이 있다. 다음과 같은 내용을 확인할 수 있다.

 

pi@raspberrypi ~/testdata $ ls -l

-rw-r--r-- 1 pi pi   62 Apr 23 13:06 customer_list.txt

-rw-r--r-- 1 pi pi  123 Apr 23 13:00 customer_product.txt

-rw-rw---- 2 pi pi   80 Apr 12 15:12 DebianManual.txt

drwxr-xr-x 4 pi pi 4096 Apr 22 09:52 TestFolder01

drwxr-xr-x 2 pi pi 4096 Apr 10 13:32 TestFolder02

-rw-r--r-- 1 pi pi  656 Apr 22 09:30 test_for_editor.txt

-rw-rw---- 1 pi pi  113 Apr 23 08:22 user_guide01.txt

 

다음과 같이 cat 명령으로 그 내용을 보면 다음과 같다

 

pi@raspberrypi ~/testdata $ cat customer_list.txt

Microsoft

Google

IBM

Facebook

LG

Samsung

Sony

Hewlett-Packard

pi@raspberrypi ~/testdata $ cat customer_product.txt

Microsoft PC

Google  Search

IBM     Super Computer

Facebook SNS

LG      Electrics

Samsung Mobile

Sony    Movie

Hewlett-Packard Printer

 

먼저 표준입력으로 입력한 자료를 xargs 명령을 통해서 다음 명령의 argument로 전달하는 사례를 볼 것이다. 다음과 같이 명령을 실행하면 표준입력을 통해서 입력을 할 수 있다.

 

pi@raspberrypi ~/testdata $  xargs cat

 

 

 

위 명령을 실행하면 다음과 같은 화면이 나타나는데, 화면에 아무것도 표시되지 않으면서 cursor가 다음 행에 있을 것이다. 이것은 표준입력에 필요한 값을 입력하라는 것을 의미한다.


 

그러면 내용을 보고자 하는 customer_list.txt 파일 이름을 입력하고 [Enter] 키를 누른다. 그 다음 입력이 완료되었음을 알려주기 위해서 CTRL +D를 눌러 표준입력에 EOF(End Of File)이 입력되도록 처리한다. 그러면 입력작업이 완료되고, 다음 작업이 처리된다.

 

그러면 표준입력에 입력된 값이 xargs 명령의 입력으로 처리되고, 그 다음 그 입력 값이 다음 명령어인 cat 명령의 argument로 전달되고, cat명령은 이 argument로 실행된다. 그러면 지정된 파일의 내용이 화면에 나타나는 것이다.

 

모든 처리가 완료되면 다음과 같은 작업 결과가 나타날 것이다.

 

pi@raspberrypi ~/testdata $  xargs cat

customer_list.txt

Microsoft

Google

IBM

Facebook

LG

Samsung

Sony

Hewlett-Packard

 


 

이번에는 cat 명령에 파일 이름을 직접 지정하지 않고 echo 명령에서 입력한 파일 이름을 xargs 명령을 통해서 cat 명령으로 전달하는 형식으로 명령을 처리해 보자. 그러면 cat 명령에 파일 이름을 직접 지정한 것과 동일한 결과가 나타난다. 이것은 echo 명령의 결과인 'customer_list.txt' xargs 명령이 받아서 cat 명령의 argument로 전달해 준 것을 의미한다.

pi@raspberrypi ~/testdata $ echo 'customer_list.txt' | xargs cat

Microsoft

Google

IBM

Facebook

LG

Samsung

Sony

Hewlett-Packard

 

이번에는 다음과 같이 customer_file.txt을 만들고 그 속에 위의 두 파일 이름을 입력하여 저장한 다음내용을 확인한 것이다.

pi@raspberrypi ~/testdata $ cat customer_file.txt

customer_list.txt

customer_product.txt

 

그런 다음 다음과 같이 xargs 명령을 실행해 보자. 가만히 보니 customer_list.txt 파일과 customer_product.txt파일의 내용이 한꺼번에 표시되어 있는 것을 알 수 있다. 이것은 customer_file 속에 있는 각각의 내용에 대해서 cat 명령이 반복해서 실행되었다는 것을 의미한다.

pi@raspberrypi ~/testdata $ xargs -a customer_file.txt cat

Microsoft

Google

IBM

Facebook

LG

Samsung

Sony

Hewlett-Packard

Microsoft PC

Google  Search

IBM     Super Computer

Facebook SNS

LG      Electrics

Samsung Mobile

Sony    Movie

Hewlett-Packard Printer


 

Leave a Reply