2013-10-25 102 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 
相关问题