Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
#!/bin/sh ## Usage: In "firstaction" or "prerotate" block of logrotate's conf; ## prerotacopy -n ROTATE_COUNT [-a] [-z] -o DEST_DIR ${1+"$@"} ## Important: Handled logfile must be logrotate'd with "nodateext". ## ## -n ROTATE_COUNT ## Mandatory. ROTATE_COUNT should be; ## [in conjunction with "firstaction"] ## Equal to logrotate's "rotate" count ## [in conjunction with "prerotate"] ## Equal to logrotate's "rotate" count (logrotate=3.7.1) ## "rotate" count + 1 (logrotate>=3.7.4) ## -o DEST_DIR ## Mandatory. Target file will be copied into DEST_DIR with ## name "BASENAME-YYYYmmddHH", where YYYYmmddHH is mod-time ## of the source file. (see also -a) ## -a ## Auto-parent. Destination becomes subdirectory on top of ## DEST_DIR. Its name is that of parent directory of the ## source. Subdirectory will be made if absent, but lack of ## DEST_DIR always produces error. ## -z ## File will be 'gzip'ed to the destination. ## function sym2mod () { ls -l $1 |awk ' { if ($1 ~ /^l/) exit 1 sub(/d/, "", $1); u = substr($1, 1, 3); gsub(/-/, "", u); sub(/s/, "xs", u); sub(/S/, "s", u); g = substr($1, 4, 3); gsub(/-/, "", g); sub(/s/, "xs", g); sub(/S/, "s", g); o = substr($1, 7); gsub(/-/, "", o); sub(/t/, "xt", o); sub(/T/, "t", o); } { printf "u=%s,g=%s,o=%s\n", u, g, o } ' return $? } AUTOP=0 COMPRESS=0 #debug #echo "$*" >/tmp/$(basename $0).out while getopts "n:o:az" opt; do case $opt in n) GEN=$OPTARG;; o) OUTDIR=$OPTARG;; a) AUTOP=1;; z) COMPRESS=1;; esac done shift $((OPTIND - 1)) if [ "x$GEN" = "x" -o "x$OUTDIR" = "x" ]; then exit 1 fi if [ "$GEN" = "0" ]; then GEN="" else GEN=".$GEN" fi # Let's do it. Target files passed by logrotate can become a list of list when # they are specified with wildcards in logrotate conf, so they must be dealt # with like two dimension array. OUTDIR_ORG=$OUTDIR for V in $*; do for F in $V; do #debug #ls -l $(dirname $F) >>/tmp/$(basename $0).out if [ -f $F$GEN ]; then OUTDIR=$OUTDIR_ORG [ -d $OUTDIR ] || exit 1 EXT=$(stat $F$GEN |grep ^Modify |cut -d' ' -f2-3 |cut -d':' -f1 |tr -d '[[:blank:]-]') if [ $AUTOP -eq 1 ]; then PDIR=$(dirname $F) OUTDIR=${OUTDIR}/${PDIR##*/} if [ ! -e "$OUTDIR" ]; then mkdir $OUTDIR &>/dev/null || continue fi fi #debug #echo "F.GEN:$F$GEN, OUTFILE:${OUTDIR}/$(basename $F)-$EXT" >>/tmp/$(basename $0).out if [ $COMPRESS -eq 1 ]; then OUTFILE=${OUTDIR}/$(basename $F)-${EXT}.gz gzip -9qc $F$GEN >$OUTFILE && chmod $(sym2mod $F$GEN) $OUTFILE &>/dev/null || : else cp -pf $F$GEN ${OUTDIR}/$(basename $F)-$EXT || : fi fi done done