2013-10-25 29 views
0

我有一個腳本作爲複製文件下面從源目錄基礎上根據文件數如何控制基於Unix中另一個文件的複製文件?


#! /bin/ksh 

export SRCDIR=/informat/PowerCenter/9.1.0/server/infa_shared/SrcFiles/CSI/historical 

export BINDIR=/informat/PowerCenter/9.1.0/server/infa_shared/Bin 

export TGTDIR=/informat/PowerCenter/9.1.0/server/infa_shared/SrcFiles/CSI/incoming 


export LASTRUNDT=`cat /informat/PowerCenter/9.1.0/server/infa_shared/ParameterFiles/CSI_CONFIRMIT_RESPONSE.param | grep '\$\$LASTRUNDATE=' | sed 's/\$\$LASTRUNDATE=//g'` 

export FILEDT=`date -d "$LASTRUNDT +1day" +%-m_%-d_%Y` 


for FILE_NUM in {11259,11318,11366,11367,11368,11369,11370,11372,11373,11374,11385,11386,11387,11388,11389,11390,11398};do 

    export GET_FNAMES=AllResponses_${FILE_NUM}_${FILEDT}*.txt 

     GET_FNAME=`ls -1 ${GET_FNAMES}` 
     if [ -f ${GET_FNAME} ]; then 
     cp ${SRCDIR}/${GET_FNAME} ${TGTDIR} 
     fi 
done 

不過,雖然上述文件拷貝做上面的腳本,文件的所有腦幹到目標目錄我不想複製文件號碼出現在下面的文件中的文件。

CSI_CONFIRMIT_RESPONSE_SWITCHOFF.cfg 

11369 

11370 

11372 

請幫助我。由於

+0

您已經使用在回答中張貼到您以前的[問題]一個片段(http://stackoverflow.com/questions/19583890/how-to-read-a-variable-從-A-文件到一個UNIX的腳本功能於UNIX)。如果該代碼片段值得使用,爲什麼不提高答案或將其標爲接受? – devnull

+0

朋友..我沒有得到你......我的觀點是我接受你的答案,否則我怎麼能在這裏發表我的問題。對不起,如果我誤導你。如果可以,請回答這個最新的問題。謝謝 – user2814717

回答

1

最簡單的方法是使用grep以檢查文件編號是存在於文件中,只執行復制,如果它不是:

for FILE_NUM in 11259 11318 11366 11367 11368 11369 11370 11372 11373 11374 11385 11386 11387 11388 11389 11390 11398; do 
    if ! grep -qFxw "$FILE_NUM" CSI_CONFIRMIT_RESPONSE_SWITCHOFF.cfg 
    then 
     # copy code here 
    fi 
done 

然而,這不是有效的,因爲你是爲每個號碼運行grep

更有效的方式,就是用comm一次進行比較的文件的編號列表,以找出哪些號碼沒有出現在文件中。請看下面:

file_nums=(11259 11318 11366 11367 11368 11369 11370 11372 11373 11374 11385 11386 11387 11388 11389 11390 11398) 
comm -23 <(printf -- '%s\n' "${file_nums[@]}" | sort) <(sort CSI_CONFIRMIT_RESPONSE_SWITCHOFF.cfg) | while IFS= read -r FILE_NUM 
do 
    # copy code here 
done 
相關問題