Linux에서 find 명령을 통해 -exec 옵션을 사용하여 여러 표현식을 실행하려면 어떻게 해야 합니까?

Linux에서 find 명령을 통해 -exec 옵션을 사용하여 여러 표현식을 실행하려면 어떻게 해야 합니까?

나는 다음의 게시물을 읽었습니다.find를 사용할 때 여러 명령을 어떻게 실행합니까?. 제공된 답변을 오해한 것이 아니라면, 그것이 제가 찾고 있는 해결책을 제공한다고 믿지 않습니다.

내 요구 사항은 특정 파일 세트를 찾는 것입니다. 발견되면 디렉토리를 생성하십시오. 디렉토리가 성공적으로 생성된 경우에만 파일을 추출합니다. 압축을 푼 후에는 소스 파일을 삭제합니다. 어떻게 하면 이를 달성할 수 있을까요?

답변1

내 생각에는 귀하가 게시한 링크가 "정확한" 답변을 제공합니다. 그냥 껍질을 생성하십시오. 이렇게 하지 않으면 도구 상자가 충분히 크지 않을 것입니다. 너~할 수 있었다다음과 같은 의사 코드로 find 명령을 작성하십시오.

find /path -criteria -exec mkdir {} \; -exec extract {} \; -exec rm {} \;

술어는 자연스럽게 함께 연결되므로 오류가 발생하면 중지됩니다. 그러나 디렉토리 이름 지정에 대한 제어가 충분하지 않습니다. 실패가 보장됩니다.

쉘을 생성하면 전체 쉘 언어를 이해할 수 있으므로 이 문제가 해결됩니다.

find /path -criteria -exec /bin/sh '
    for d; do
        mkdir "${d##*/}" && tar xvf "$d" && rm "$d"
    done' _ {} +

이 버전에는 특정 루프 반복에 대해 오류가 계속 발생하는 부작용이 있습니다.모두결과. 오류가 발생했을 때 즉시 중지하려면 -e 플래그를 사용하여 쉘을 생성하는 것이 좋습니다.

관련 정보