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


find 명령어를 사용하다 보면 파이프라인이 작동하지 않는 경우가 있다.
파이프라인 (|)은 전 명령어의 stdout (표준출력)을 
다음 명령어의 stdin (표준입력)으로 바꿔주는 역할을 한다.

예를들어

# find와 rm 조합
find -name . directory1 | rm
-> X
rm 명령어는 stdin을 무시하는 명령어이다.
이런 경우 xargs 명령어를 사용하면 해결이 된다.

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

find -name . directory1 | xargs rm

혹은

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

이렇게 쓸 수 있다.
이때 rm 뒤의 기호들은
{} : find의 결과 파일들을 의미한다.
\; : 각각의 결과에 대해 명령어를 실행하고 -exec을 끝냄을 의미한다.

# find와 cp 조합
directory1 에서 파일을 찾아 directory2로 복사시킨다고 생각해보자.
find -name . directory1 | cp directory2
-> X

위의 rm 명령어와 같이
find -name . directory1 | cp directory2

혹은


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


find -name . filename -exec cp directory {} \;
-> X 복사할 파일이 정해지지 않았으므로 오류가 뜬다.

cp 명령어의 syntax는 아래와 같다.
cp [option] [filename] [directory]

{}는 find의 결과 파일들을 의미하기 때문에
목적지 디렉토리의 앞에 써야한다.



덧글

댓글 입력 영역