Ssh
帶有空格的文件名上的 Shell 腳本錯誤
我有一個 bash 腳本,它搜尋位於我的伺服器根目錄下的每個靜態文件,並在每個文件旁邊儲存一個 gzip 壓縮版本。我從http://wiki.linuxwall.info/doku.php/en:ressources:dossiers:nginx:nginx_performance_tuning得到它
問題是它不適用於帶有空格的文件名,我的網站現在不使用任何文件名,我會嘗試永遠不會,但我不是唯一一個在前端工作的人所以我可能無法始終控制它,所以我只想確保這個腳本也適用於有空格的文件。希望有人可以看看並幫助我解決它。
#! /bin/bash FILETYPES=("*.html" "*.woff" "*.css" "*.jpg" "*.jpeg" "*.gif" "*.png" "*.js") # specify a list of directories to check recursively DIRECTORIES="/usr/share/nginx/www/" for currentdir in $DIRECTORIES do for i in "${FILETYPES[@]}" do find $currentdir -iname "$i" -exec bash -c 'PLAINFILE="{}";GZIPPEDFILE="{}".gz; \ if [ -e "$GZIPPEDFILE" ]; \ then if [ `stat --printf=%Y $PLAINFILE` -gt `stat --printf=%Y $GZIPPEDFILE` ]; \ then echo "$GZIPPEDFILE outdated, regenerating"; \ gzip -9 -f -c $PLAINFILE > $GZIPPEDFILE; \ fi; \ else echo "$GZIPPEDFILE is missing, creating it"; \ gzip -9 -c $PLAINFILE > $GZIPPEDFILE; \ fi' \; done done
引用帶有文件名的變數,這樣它們就不會被解釋為命令的多個參數:
#! /bin/bash FILETYPES=("*.html" "*.woff" "*.css" "*.jpg" "*.jpeg" "*.gif" "*.png" "*.js") # specify a list of directories to check recursively DIRECTORIES="/usr/share/nginx/www/" for currentdir in $DIRECTORIES do for i in "${FILETYPES[@]}" do find "$currentdir" -iname "$i" -exec bash -c 'PLAINFILE="{}";GZIPPEDFILE="{}".gz; \ if [ -e "$GZIPPEDFILE" ]; \ then if [ `stat --printf=%Y "$PLAINFILE"` -gt `stat --printf=%Y "$GZIPPEDFILE"` ]; \ then echo "$GZIPPEDFILE outdated, regenerating"; \ gzip -9 -f -c "$PLAINFILE" > "$GZIPPEDFILE"; \ fi; \ else echo "$GZIPPEDFILE is missing, creating it"; \ gzip -9 -c "$PLAINFILE" > "$GZIPPEDFILE"; \ fi' \; done done