在UNIX中的多个位置复制相同的文件

问题描述 投票:0回答:1

我在源位置下面有3个文件$ {PDR}

PHONE_ABC.txt
PHONE_EFG.txt
PHONE_XYZ.txt

我需要在3个不同的位置复制相同的文件,并为其添加时间和一些文本:

Target Location 1 ${LCT1}
Target Location 2 ${LCT2}
Target Location 3 ${LCT3}

位置1的文件应如下所示:

PHONE_ABC_LCT1_20180914.txt
PHONE_EFG_LCT1_20180914.txt
PHONE_XYZ_LCT1_20180914.txt

位置2的文件应如下所示:

PHONE_ABC_LCT2_20180914.txt
PHONE_EFG_LCT2_20180914.txt
PHONE_XYZ_LCT2_20180914.txt

位置3的文件应如下所示:

PHONE_ABC_LCT3_20180914.txt
PHONE_EFG_LCT3_20180914.txt
PHONE_XYZ_LCT3_20180914.txt

使用的代码

#!/usr/bin/ksh

cp ${PDR}/PHONE_*.txt ${LCT1}/
cp ${PDR}/PHONE_*.txt ${LCT2}/
cp ${PDR}/PHONE_*.txt ${LCT3}/

# define list of files
LCT1=${LCT1}/PHONE_*.txt
LCT2=${LCT2}/PHONE_*.txt
LCT3=${LCT3}/PHONE_*.txt

# grab time
dtstamp=`date +%Y%m%d`

# for LCT1
for file in ${LCT1}
do
    if [ ! -s ${file} ]
    then
        continue
    fi
    filebase=${file%.csv}
    mv ${file} ${filebase}_LCT1_${dtstamp}.txt
done

# for LCT2
for file in ${LCT2}
do
    if [ ! -s ${file} ]
    then
        continue
    fi
    filebase=${file%.csv}
    mv ${file} ${filebase}_LCT2_${dtstamp}.txt
done

# for LCT3
for file in ${LCT3}
do
    if [ ! -s ${file} ]
    then
        continue
    fi
    filebase=${file%.csv}
    mv ${file} ${filebase}_LCT3_${dtstamp}.txt
done

这给了我我所需要的。但不知何故,我相信这段代码可以更高效,更强大,我无法弄清楚。同样在第2天,它会不断地将时间戳附加到目标位置的文件中,这不是一件好事。

任何使这段代码看起来更高效和更好的指针。

unix scripting ksh
1个回答
1
投票

这样的事可能:

#!/usr/bin/ksh

# grab time
dtstamp=$(date +"%Y%m%d")

cd ${PDR}
for file in PHONE_*.txt
do
    if [ ! -s ${file} ]
    then
        continue
    fi
    cp ${file} ${LCT1}/${file%.txt}_LCT1_${dtstamp}.csv
    cp ${file} ${LCT2}/${file%.txt}_LCT2_${dtstamp}.csv
    cp ${file} ${LCT3}/${file%.txt}_LCT3_${dtstamp}.csv
done
© www.soinside.com 2019 - 2024. All rights reserved.