adsense_in_article_test


[bash: find, cp] 조건에 맞는 파일을 찾아 복사하기 리눅스 bash script

조건에 맞는 파일을 찾아 특정 디렉토리로 복사를 하고 싶을 경우, find와 cp 명령을 xargs 명령으로 연결하면 되겠다.

파일을 찾기 위한 find 명령에 대한 내용은 이전 게시물을 참고하자.

우선 홈디렉토리(~/)에서 확장자가 txt인 파일을 찾는 예시를 보자.

find ~/ -type f | grep "\.txt$"


자, 이 결과를 가져와서 cp 명령을 실행해야 한다. 앞에 실행한 명령의 결과를 뒤에 실행할 명령의 인자(argument)로 넘겨주는 xargs 명령을 이용하는데, 한가지 유의할 점이 있다. 아래의 예시를 보자.

# txt 파일을 찾아 ~/Documents 디렉토리로 복사 (잘못된 시도)
find ~/ -type f | grep "\.txt$" | xargs cp ~/Documents
# 실패!

위와 같이 하면 제대로 복사가 되지 않는다. cp 명령에서 복사하려는 목적지 디렉토리와 앞의 find 명령에서 넘어온 파일 목록이 혼동되지 않도록 반드시 -t 옵션을 사용해야 한다. 제대로 된 예시는 아래와 같다.

# txt 파일을 찾아 ~/Documents 디렉토리로 복사(성공)
find ~/ -type f | grep "\.txt$" | xargs cp -t ~/Documents



덧글

  • 태민 2013/11/12 22:29 # 삭제 답글

    배시 명령 치환 기능이 xargs 보다 더 잛고 실수할 여지가 적습니다.

    cp $(find ~ -type f -name "*.txt") ~/Document
  • 반달가면 2013/11/12 22:37 #

    아 네. 위의 경우엔 그편이 더 낫겠네요. 개인적으로는 명령어나 프로그램을 여러개 조합해야 하는 경우가 종종 있어서 치환보다는 파이프(|)를 이용하는 쪽으로 가게 되더군요.
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.



통계 위젯 (화이트)

22128
2047
2394491

2019 대표이글루_IT

B-Side