find를 사용하여 일련의 명령 실행

find를 사용하여 일련의 명령 실행

디렉토리를 확인하고 일치하는 각 폴더에 대해 명령을 실행하고 싶습니다. 다음은 find내가 찾고 있는 목록을 올바르게 반환합니다.

find . -maxdepth 1 -name "*.bitbucket"

반환된 각 항목에 대해 다음 명령을 실행하고 싶습니다.

hg pull --update --repository [FIND_RESULT_HERE]

find 및 xargs를 사용하여 이를 수행하는 쉬운 방법이 있습니까? 그렇지 않다면 최선의 선택은 무엇입니까?

답변1

-exec옵션을 find다음과 같이 사용하십시오.

find . -maxdepth 1 -name "*.bitbucket" -exec hg pull --update --repository {} \;

gets는 {}find 결과로 대체되며 \;종결자는 한 번에 하나씩 실행되어야 함을 나타냅니다. A는 +여러 가지가 인수로 함께 묶이게 됩니다.

답변2

find . -maxdepth 1 -name "*.bitbucket" -execdir hg pull --update --repository {} +

여러 파일이 병렬로 처리됩니다. 모든 find에 -execdir이 있는 것은 아닙니다. Gnu/find에서는 오류를 피하기 위해 이 사용을 권장합니다.

답변3

@Caleb의 답변은 훌륭합니다. 아니면 이 작업을 수행하는 데 사용할 수 있습니다 xargs.

각 찾기 결과에 대해 hg 작업을 수행하려면 (@Caleb이 지적했듯이)

find . -depth 1 -name "*.bitbucket" | xargs -n1 hg pull --update --repository

모든 찾기 결과를 하나의 명령에 누적하려면 를 제거하십시오 -n1.

또한 조심하세요 -depth. 이 옵션은 매개변수를 사용하지 않습니다. 내 생각엔 -maxdepth.

관련 정보