디렉토리를 확인하고 일치하는 각 폴더에 대해 명령을 실행하고 싶습니다. 다음은 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
.