-1

我需要一个 shell 脚本来搜索和替换文件。详情如下。请帮忙

  1. 基本上每天我都会将一些文件放入我的目录中。如下所示,我会收到 100 个文件

AllResponses_11003_6_20_2013.txt

AllResponses_11004_6_20_2013.txt

AllResponses_11005_6_20_2013.txt

AllResponses_11006_6_20_2013.txt

AllResponses_11007_6_20_2013.txt

AllResponses_11008_6_20_2013.txt

AllResponses_11009_6_20_2013.txt

AllResponses_11010_6_20_2013.txt

AllResponses_11011_6_20_2013.txt

AllResponses_11012_6_20_2013.txt

  1. 其中我需要根据文件号将5个文件复制到另一个目录(11003,11004,11005,11006,11007)

AllResponses_11003_6_20_2013.txt

AllResponses_11004_6_20_2013.txt

AllResponses_11005_6_20_2013.txt

AllResponses_11006_6_20_2013.txt

AllResponses_11007_6_20_2013.txt

  1. 如果找不到,则需要将这 5 个文件替换为 0 字节文件到另一个目录中。

请帮忙

但是如何在 11003 到 11100 等数百个数字中将 num 作为 11003,11004,11005,11006,11007 传递

请帮助...

导出 SRCDIR=/informat/PowerCenter/9.1.0/server/infa_shared/SrcFiles/CSI/historical

导出 TGTDIR=/informat/PowerCenter/9.1.0/server/infa_shared/SrcFiles/CSI/incoming

导出 FILEDT=6_15_2013

导出 FILEDT=$(日期 +"%-m_%-d_%Y")

循环搜索和复制文件

对于“$@”中的 FILE_NUM;

GET_FNAME="AllResponses_"${FILE_NUM}"_"${FILEDT}"*.txt"

如果 [ -f ${GET_FNAME} ]; 然后

cp ${SRCDIR}/${GET_FNAME} ${TGTDIR}

别的

echo "${SRCDIR} 中缺少文件 ${GET_FNAME}"

触摸 ${TGTDIR}/AllResponses_${FILE_NUM}_${FILEDT}.txt

echo "在 ${TGTDIR} 中创建了 ${GET_FNAME} 触摸文件"

完成

iam 像上面一样完成并执行为 ksh -x csi_file_copy_bala.ksh 11003 11004 99999

但它总是去其他条款..请帮助我...

我的文件名看起来像...AllResponses_11004_6_11_20132_18_00AM1.txt

请帮助我......因为我的时间不多了

提前致谢

4

1 回答 1

1

假设通过shell你的意思是bash:

骨架开始:

luk32:~/projects/tests$ cat ./process_files.sh
#!/bin/bash
DEST=./copies
for num in "$@"; do
 file="AllResponses_"$num"_6_20_2013.txt"
 if [ -f $file ]; then
  cp $file $DEST
 else
  touch $DEST/$file
 fi
done;

它将数字作为参数,然后尝试在当前工作目录中查找具有给定模式的文件。如果找到复制到目标文件夹,否则touch为文件。您可能需要进行一些修改才能比硬编码的日期处理更友好。

例子:

luk32:~/projects/tests$ ls -l
total 40116
-rw-r--r-- 1 luk32 luk32        4 cze 21 11:33 AllResponses_1_6_20_2013.txt
-rw-r--r-- 1 luk32 luk32        5 cze 21 11:33 AllResponses_3_6_20_2013.txt
-rw-r--r-- 1 luk32 luk32        0 cze 21 11:32 AllResponses_4_6_20_2013.txt
luk32:~/projects/tests$ ls -l ./copies/
total 0
luk32:~/projects/tests$ ./process_files.sh 1 2 3 4
luk32:~/projects/tests$ ls -l ./copies/
total 8
-rw-r--r-- 1 luk32 luk32 4 cze 21 11:35 AllResponses_1_6_20_2013.txt
-rw-r--r-- 1 luk32 luk32 0 cze 21 11:35 AllResponses_2_6_20_2013.txt
-rw-r--r-- 1 luk32 luk32 5 cze 21 11:35 AllResponses_3_6_20_2013.txt
-rw-r--r-- 1 luk32 luk32 0 cze 21 11:35 AllResponses_4_6_20_2013.txt
于 2013-06-21T09:37:19.047 回答