2016-08-16 5 views
0

매주 cronjob을 통해 실행하여 수천 개의 이미지를 최적화했습니다. 내 문제는 CPU를 낮추는 최적화 된 이미지를 검색한다는 것입니다. 마지막 스캔/최적화를 어떻게 저장하고이 날짜 이후에 파일 및 폴더를 최적화 할 수 있습니까?jpegoptim 마지막으로 실행 한 셸을 저장하고이 날짜 이후에 파일이나 폴더를 확인하십시오.

내 코드 만 할

find . -name '*.jpg' | xargs jpegoptim --strip-all 
find . -name '*.jpg' | xargs jpegoptim --all-progressive 
chmod -R 777 * 
+0

'find | 'xargs'는'find '측에서'-print0'을 사용하고'xargs' 측에서'-0'을 사용하지 않는 한 실제로 안전하지 않습니다 (불행히도 이들 모두 POSIX가 아닌 옵션이지만 다행히도 세계의 GNU와 BSD 양쪽 모두). 'xargs'는 파일명의 따옴표와 공백을 통어론으로 취급하기 때문에, 파일 이름을 철저히 통제하지 않으면 원래 코드를 사용하면 내용을 놓칠 수 있습니다. –

+1

BTW,'chmod 777'은 ** 매우 ** 나쁜 습관입니다. 'nobody'를 포함하는 모든 사용자에게 파일에 대한 쓰기 권한을주는 것은 운영 체제가 신뢰할 수없는 사용자로 실행되고있는 소프트웨어 **를 의미합니다. 왜냐하면 해당 소프트웨어는 잠재적으로 악의적 인 데이터를 처리하는 것으로 간주되기 때문입니다. ** 귀하의 콘텐츠에 'ssh'는 예를 들어 핸드 쉐이크 프로세스 초기에 (원격 시스템의 자격 증명이 인증되기 전에) 코드를 실행합니다. 일반적으로 'o + w'는 결코 수행되지 않아야하며, 'o + wx'는 이중적으로 적용됩니다. –

+0

(이제 chroot와 같은 다른 sandboxing이 종종 있습니다.)하지만 Linux의 chroot는 우회하기 훨씬 쉽습니다. '아무도 없다'라는 샌드 박스 데몬의 신뢰할 수없는 구성 요소를 실행하는 것은 중요하지 않습니다. –

답변

1

쉬운 일이 파일 가장 최근의 처리 시간을 추적, 해당 파일보다 새로운 컨텐츠 자체를 제한하는 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-alljpegoptim --all-progressive이 동시에 동일한 파일에 대해 안전하게 작동 할 수없는 경우이 동작이 잘못 될 수 있다는 것입니다.

+0

하위 폴더'find images/-name '* 내에서 검색하려면 * .jpg " – karadayi

+0

@ karadayi, ... 단어는"하위 디렉토리 "입니다. "폴더"는 Windowsism입니다. –