나는 다음의 게시물을 읽었습니다.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 플래그를 사용하여 쉘을 생성하는 것이 좋습니다.