在 UNIX 中的多个位置复制相同的文件
Copy same files at multiple locations in UNIX
我在源位置 ${PDR} 有以下 3 个文件
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 天,它不断将时间戳附加到目标位置的文件,我认为这不是一件好事。
任何使此代码看起来更有效和更好的指针。
可能是这样的:
#!/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
我在源位置 ${PDR} 有以下 3 个文件
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 天,它不断将时间戳附加到目标位置的文件,我认为这不是一件好事。
任何使此代码看起来更有效和更好的指针。
可能是这样的:
#!/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