Nginx 서버를 최적화하려고 합니다. CSS, JS, HTML과 같은 사전 압축된 gzip 정적 파일을 제공하기 위해 Gzip_Static_Module을 활성화했습니다.
Nginx Wiki에서는 압축된 파일과 압축되지 않은 파일의 타임스탬프가 일치한다고 말합니다. 그래서 Gzip 압축 전에 이 파일들을 만져보려고 합니다.
*.gz
다음을 사용하여 이러한 정적 파일을 만지고 생성 하려고 합니다 .
$ su -c "find . -type f -name "*.css" -size +1024b -exec sh -c "touch {} \
&& gzip -9v < {} > {}.gz" \;"
$ su -c "find . -type f -name "*.js" -size +1024b -exec sh -c "touch {} \
&& gzip -9v < {} > {}.gz" \;"
$ su -c "find . -type f -name "*.html" -size +1024b -exec sh -c "touch {} \
&& gzip -9v < {} > {}.gz" \;"
하지만 "사용자{}를 찾을 수 없음" 오류가 발생합니다.
누구든지 위 명령의 문제점을 확인하도록 도와줄 수 있습니까? 압축되지 않은 파일의 타임스탬프가 변경될 때마다(예: Cronjob) *.gz를 자동으로 생성하는 더 좋은 방법이 있습니까?
답변1
su -c ...
실행하려는 명령에 큰따옴표가 포함되어 있기 때문에 인용 문제가 있는 것 같습니다. 전체 내용을 작은따옴표로 묶는 것이 좋습니다.
$ su -c 'find . -type f -name "*.css" -size +1024b -exec sh -c "touch {} && \
gzip -9v < {} > {}.gz" \;'
큰따옴표가 포함된 항목을 이스케이프 처리할 수도 있지만 이는 종종 디버깅을 혼란스럽게 만들기 때문에 이를 피하고 싶지만 스타일/취향 선호도에 따른 또 다른 옵션입니다.
답변2
왜 파일을 호출하기 전에 파일을 "터치"하고 싶습니까 gzip
?
맨 페이지 gzip
:
Gzip은 Lempel-Ziv 인코딩(LZ77)을 사용하여 지정된 파일의 크기를 줄입니다. 가능할 때마다 각 파일은 동일한 소유권 모드, 액세스 및 수정 시간을 유지하면서 확장명이 .gz인 파일로 대체됩니다.
파일을 전혀 건드릴 필요가 없습니다. 다음을 실행하세요.
$ su -c "find . -type f -name \"*.css\" -size +1024b -exec gzip -9vk '{}' \;
-k
압축 후 원본 파일을 유지하는 옵션을 사용했습니다 . gzip
이 옵션은 버전 1.6에서 도입되었습니다 gzip
.
답변3
더 간결한 방법:
DIR=/var/www
gzip -rk9 $DIR &&\
find $DIR -not -name '*.gz' -type f -exec touch -r {} {}.gz \;
이는 www 디렉터리의 모든 내용을 "최상" 수준으로 압축한 다음 터치를 사용하여 gzip의 mtime 및 atime을 해당 소스 파일의 mtime 및 atime으로 설정합니다(예:Nginx 문서제안).
답변4
find dist -type f -exec sh -c "gzip < '{}' > '{}'.gz" \;