Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在UNIX中搜索数百个文件中的少数文件,如果找不到,则替换为0字节文件_Unix - Fatal编程技术网

如何在UNIX中搜索数百个文件中的少数文件,如果找不到,则替换为0字节文件

如何在UNIX中搜索数百个文件中的少数文件,如果找不到,则替换为0字节文件,unix,Unix,我需要一个shell脚本来搜索和替换文件。详情如下。Pl帮助 基本上每天我都会把一些文件放到我的目录中,就像下面我得到的100个文件一样 所有回复_11003_6_20_2013.txt 所有回复_11004_6_20_2013.txt 所有回复_11005_6_20_2013.txt 所有回复_11006_6_20_2013.txt 所有回复_11007_6_20_2013.txt 所有回复_11008_6_20_2013.txt 所有回复_11009_6_20_2013.txt 所有回复_1

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

  • 基本上每天我都会把一些文件放到我的目录中,就像下面我得到的100个文件一样
  • 所有回复_11003_6_20_2013.txt

    所有回复_11004_6_20_2013.txt

    所有回复_11005_6_20_2013.txt

    所有回复_11006_6_20_2013.txt

    所有回复_11007_6_20_2013.txt

    所有回复_11008_6_20_2013.txt

    所有回复_11009_6_20_2013.txt

    所有回复_11010_6_20_2013.txt

    所有回复_11011_6_20_2013.txt

    所有回复_11012_6_20_2013.txt

  • 其中,我需要根据文件号(1100311004110051100611007)将5个文件复制到另一个目录
  • 所有回复_11003_6_20_2013.txt

    所有回复_11004_6_20_2013.txt

    所有回复_11005_6_20_2013.txt

    所有回复_11006_6_20_2013.txt

    所有回复_11007_6_20_2013.txt

  • 如果找不到,则需要将这5个文件替换为0字节文件到另一个目录中
  • Pl帮助

    但是如何在像11003到11100这样的数百个数字中传递num为110031100411005110061000611007呢

    Pl帮助

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

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

    出口文件DT=6_15_2013

    导出文件dt=$(日期+“%-m\%d\%Y”) 循环以搜索和复制文件 对于“$@”中的文件\u NUM

    GET_FNAME=“AllResponses”${FILE_NUM}“${FILEDT}”*.txt”

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

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

    否则

    echo“${SRCDIR}中缺少文件${GET\u FNAME}”

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

    echo“在${TGTDIR}中创建了${GET\u FNAME}touch文件”

    完成

    iam如上所述,并作为ksh-x csi文件副本执行。ksh 11003 11004 9999

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

    我的文件列表看起来像…AllResponses\u 11004\u 6\u 11\u 20132\u 18\u 00AM1.txt

    请帮帮我…因为我没时间了


    提前感谢

    假设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;
    
    它将数字作为参数,然后尝试在当前工作目录中查找具有给定模式的文件。如果找到“复制到目标文件夹”,则触摸文件。 与硬编码的日期处理相比,您可能需要稍加修改才能变得更友好

    例如:

    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
    

    谢谢…但还有一个帮助…但是如何在for循环中的成百上千个数字(如11003到11100)中将num传递为1100311004110051100611007。您需要更具体一些,是否始终需要一个范围<代码>序列11003 11050将生成范围。查看
    man-seq
    。你需要弄清楚如何得到这些数字,因为它更复杂。你可以这样做,
    /process\u files.sh{11003..11100}
    我通常会这样做
    /process\u files.sh`seq 1100
    `但我想这只是一种不同的语法。如果在
    `cmd`
    中嵌入一个命令,它将被扩展为一个字符串,并在此处显示。因此,通常
    seq
    会生成数字,但在此上下文中,它的输出将作为命令行参数。。我的意思是它的输出将被放置在它的位置上。我经常将它与
    ls
    seq
    一起使用。比如
    /do\u magic\u to.sh`ls AllResponses*`