1

誰かが私と一緒に問題を解決しようとするのを手伝ってくれるのだろうか。

監査サーバー上のGOLDビルドに基づいてリモートファイルシステムを監査することを目的として、一連のシェルスクリプトを作成しました。

この一環として、私は次のことを行います。

1)rsyncを使用して、新しいファイルやディレクトリ、変更または削除されたファイルを処理します

2)find ${source_filesystem} -ls権限の違いを解決するために、ローカルとリモートの両方で使用します

現在、この一部として、私が除外している特定のファイルまたはディレクトリがあります。つまり、ログ、トレースファイルなどです。

したがって、これを実現するために、2つの方法を使用します。

1)RSYNC---exclude-fromフラグを使用して追加された除外リストがあります

2)find -ls-egrep -vステートメントを使用して、rsyncexclude-listと同じものを除外します。

例えばfind -L ${source_filesystem} -ls | egrep -v "$SEXCLUDE_supt"

したがって、私の問題は、2つの別々のリストを維持する必要があることであり、これは管理者にとって少し悪夢です。

find -lsrsyncまたは?の両方に使用できる除外のリストを動的に作成できるかどうかについて、いくつかの支援またはアドバイスを探しています。

除外リストの形式は次のとおりです。

RSYNC:

*.log
*.out
*.csv
logs
shared
tracing
jdk*
8.6_Code
rpsupport
dbarchive
inarchive
comms
PR116PICL
**/lost+found*/
dlxwhsr*
regression
tmp
working
investigation
Investigation
dcsserver_weblogic_*.ear
dcswebrdtEAR_weblogic_*.ear

探す:

SEXCLUDE_supt="\.log|\.out|\.csv|logs|shared|PR116PICL|tracing|lost\+found|jdk|8\.6\_Code|rpsupport|dbarchive|inarchive|comms|dlxwhsr|regression|tmp|working|investigation|Investigation|dcsserver_weblogic_|dcswebrdtEAR_weblogic_"
4

2 に答える 2

0

findコマンド用に2番目のリストを作成する必要はありません。フラグgrepを使用してパターンのリストを処理できます。-fマニュアルから:

-f FILE, --file=FILE
    Obtain patterns from FILE, one per line. The empty file contains zero 
    patterns, and therefore matches nothing. (-f is specified by POSIX.)

これが私がすることです:

find -L ${source_filesystem} -ls | grep -Evf your_rsync_exclude_file_here

これは、改行とスペースを含むファイル名でも機能するはずです。どうなるか教えてください。

于 2013-01-26T05:51:37.747 に答える
0

最後に、rsyncは正規表現をサポートしていないため、grep -Evfは少し悪夢でした。正規表現を使用しますが、同じではありません。

そこで、rsync の除外リストを解析し、その場で変数を作成して egrep に渡すことで、egrep の除外リストを動的に作成するという別のアイデアを追求しました。

これは私が使用した方法です:

#!/bin/ksh
# Create Signature of current build

AFS=$1

#Create Signature File
crSig()
{
  find -L ${SRC} -ls | egrep -v **"$SEXCLUDE"** | awk '{fws = ""; for (i = 11; i <= NF; i++) fws = fws $i " "; print $3, $6, fws}' | sort >${BASE}/${SIFI}.${AFS}
}

#Setup SRC, TRG & SCROOT
LoadAuditReqs()
{
  export SRC=`grep ${AFS} ${CONF}/fileSystem.properties | awk {'print $2'}`
  export TRG=`grep ${AFS} ${CONF}/fileSystem.properties | awk {'print $3'}`
  export SCROOT=`grep ${AFS} ${CONF}/fileSystem.properties | awk {'print $4'}`
  **export BEXCLUDE=$(sed -e 's/[*/]//g' -e 's/\([._+-]\)/\\\1/g' ${CONF}/exclude-list.${AFS} | tr "\n" "|")**
  **export SEXCLUDE=$(echo ${BEXCLUDE} |  sed 's/\(.*\)|/\1/')**
}

#Load Properties File
LoadProperties()
{
  . /users/rpapp/rpmonit/audit_tool/conf/environment.properties
}

#Functions
LoadProperties
LoadAuditReqs
crSig

したがって、これらの新しい変数を使用すると、次のようになります。

  **export BEXCLUDE=$(sed -e 's/[*/]//g' -e 's/\([._+-]\)/\\\1/g' ${CONF}/exclude-list.${AFS} | tr "\n" "|")**
  **export SEXCLUDE=$(echo ${BEXCLUDE} |  sed 's/\(.*\)|/\1/')**

それらを使用して「*」と「/」を削除し、特殊文字と一致させ、先頭に「\」を追加してエスケープします。

次に、「tr」を使用して改行を「|」に置き換えます その出力を再実行して、末尾の「|」を削除します crSig 関数で使用される egrep に使用する変数 $SEXCLUDE を作成します。

どう思いますか?

于 2013-01-31T11:50:56.443 に答える