본문 바로가기
Computer Science/[19-상] Linux Bash Script

[Linux_bash] find,rm,cp: | (파이프라인) 이 작동하지 않을 때

by gojw 2020. 2. 29.

find 명령어를 사용하다 보면 파이프라인이 작동하지 않는 경우가 있다.

파이프라인 (|)은 전 명령어의 stdout (표준출력)을 

다음 명령어의 stdin (표준입력)으로 바꿔주는 역할을 한다.

 

예를 들어서

 

1. find와 rm 조합

find -name . directory1 | rm

-> X

rm 명령어는 stdin을 무시하는 명령어이다.

이런 경우 xargs 명령어를 사용하면 해결이 된다.

xargs 명령어는 stdout을 arguments(인자)로 전달해 명령을 실행한다.

또한 여러가지 옵션을 더해서 사용할 수도 있다. ( man xargs 로 확인 )

 

find -name . directory1 | xargs rm

 

혹은

 

find -name . directory1 -exec rm {} \;

 

이렇게 쓸 수 있다.

이때 rm 뒤의 기호들은

{} : find의 결과 파일들을 의미한다.

\; : 각각의 결과에 대해 명령어를 실행하고 -exec을 끝냄을 의미한다.

 

2. find와 cp 조합

directory1 에서 파일을 찾아 directory2로 복사시킨다고 생각해보자.

find -name . directory1 | cp directory2

-> X

 

위의 rm 명령어와 같이

find -name . directory1 | xargs -I{} cp {} directory2

 

혹은

 

find -name . directory1 -exec cp {} directory \;

 

cp 명령어의 syntax는 아래와 같다.

cp [option] [filename] [directory]

-I[기본값] 옵션은 인자가 들어갈 위치를 정해준다.

cp명령어의 경우 option과 목적지 directory 사이가 맞는 위치이다.

 

find -name . filename -exec cp directory {} \;

-> X

{}의 위치가 틀려서 복사할 파일이 정해지지 않았으므로 오류가 뜬다.

 

{}는 find의 결과 파일들을 의미하기 때문에

목적지 디렉토리의 앞에 써야한다.

 

xargs 명령어 참고 자료:

man page: http://man7.org/linux/man-pages/man1/xargs.1.html

 

xargs(1) - Linux manual page

XARGS(1) General Commands Manual XARGS(1) NAME         top xargs - build and execute command lines from standard input SYNOPSIS         top xargs [options] [command [initial-arguments]] DESCRIPTION         top This manual page documents the GNU version of

man7.org

KLDP의 질문:

https://kldp.org/node/40182

 

xargs 명령? | KLDP

man 을 보니 "표준입력으로부터의 명령라인을 실행" 한다고 되어있는데 무슨말인지 모르겠습니다. 어떨때 사용하고 어떻게 사용하는지요?

kldp.org

 

댓글