쉬운 일이 파일 가장 최근의 처리 시간을 추적, 해당 파일보다 새로운 컨텐츠 자체를 제한하는 find
에게 접촉하는 것입니다.
다른 가기 전에 하나 개의 모드에 jpegoptim
의 모든 호출을 완료, 우리는 두 개의 패스를 실행 한 이전의 의미를 유지하려면 :
#!/bin/bash
extra_args=()
[[ -e last-scan ]] && extra_args=(-newer last-scan)
find . -name '*.jpg' "${extra_args[@]}" -exec jpegoptim --strip-all '{}' +
find . -name '*.jpg' "${extra_args[@]}" -exec jpegoptim --all-progressive '{}' +
touch last-scan
대안으로는, 고려 :
#!/bin/bash
extra_args=()
[[ -e last-scan ]] && extra_args=(-newer last-scan)
find . -name '*.jpg' "${extra_args[@]}" \
-exec sh -c 'jpegoptim --strip-all "[email protected]"; jpegoptim --all-progressive "[email protected]"' _ '{}' +
touch last-scan
이 후자의 방법에서는 패스 하나만 수행하고 각 파일 배치를 셸 (responsib)에 전달합니다 그 일괄 처리에 대해 차례대로 각 모드에서 jpegoptim
을 실행하십시오.
마지막으로 우리가 직접 jpegoptim
의 두 복사본을 시작하는 하나의 find
패스를 가지고, 여기
#!/bin/bash
extra_args=()
[[ -e last-scan ]] && extra_args=(-newer last-scan)
find . -name '*.jpg' "${extra_args[@]}" \
-exec jpegoptim --strip-all '{}' + \
-exec jpegoptim --all-progressive '{}' +
touch last-scan
;jpegoptim
동시 사용에 대한 안전 경우, 다음을 수행 할 수 여기서 위험은 jpegoptim --strip-all
과 jpegoptim --all-progressive
이 동시에 동일한 파일에 대해 안전하게 작동 할 수없는 경우이 동작이 잘못 될 수 있다는 것입니다.
'find | 'xargs'는'find '측에서'-print0'을 사용하고'xargs' 측에서'-0'을 사용하지 않는 한 실제로 안전하지 않습니다 (불행히도 이들 모두 POSIX가 아닌 옵션이지만 다행히도 세계의 GNU와 BSD 양쪽 모두). 'xargs'는 파일명의 따옴표와 공백을 통어론으로 취급하기 때문에, 파일 이름을 철저히 통제하지 않으면 원래 코드를 사용하면 내용을 놓칠 수 있습니다. –
BTW,'chmod 777'은 ** 매우 ** 나쁜 습관입니다. 'nobody'를 포함하는 모든 사용자에게 파일에 대한 쓰기 권한을주는 것은 운영 체제가 신뢰할 수없는 사용자로 실행되고있는 소프트웨어 **를 의미합니다. 왜냐하면 해당 소프트웨어는 잠재적으로 악의적 인 데이터를 처리하는 것으로 간주되기 때문입니다. ** 귀하의 콘텐츠에 'ssh'는 예를 들어 핸드 쉐이크 프로세스 초기에 (원격 시스템의 자격 증명이 인증되기 전에) 코드를 실행합니다. 일반적으로 'o + w'는 결코 수행되지 않아야하며, 'o + wx'는 이중적으로 적용됩니다. –
(이제 chroot와 같은 다른 sandboxing이 종종 있습니다.)하지만 Linux의 chroot는 우회하기 훨씬 쉽습니다. '아무도 없다'라는 샌드 박스 데몬의 신뢰할 수없는 구성 요소를 실행하는 것은 중요하지 않습니다. –