-1

ファイルを検索して置換するためのシェル スクリプトが必要です。詳細は以下。助けてください

  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. その中で、ファイル番号(11003、11004、11005、11006、11007)に基づいて、5つのファイルを別のディレクトリにコピーする必要があります

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 として渡す方法

助けてください...

export SRCDIR=/informat/PowerCenter/9.1.0/server/infa_shared/SrcFiles/CSI/historical

export TGTDIR=/informat/PowerCenter/9.1.0/server/infa_shared/SrcFiles/CSI/incoming

エクスポート FILEDT=6_15_2013

export FILEDT=$(日付 +"%-m_%-d_%Y")

ファイルを検索してコピーするためのループ

"$@" の FILE_NUM に対して;

行う

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

if [ -f ${GET_FNAME} ]; それから

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

そうしないと

echo "ファイル ${GET_FNAME} が ${SRCDIR} にありません"

touch ${TGTDIR}/AllResponses_${FILE_NUM}_${FILEDT}.txt

echo "${GET_FNAME} touch ファイルを ${TGTDIR} に作成しました"

やった

上記のように実行し、 ksh -x csi_file_copy_bala.ksh 11003 11004 99999 として実行します

しかし、それは常にelse句になります..助けてください...

私のファイルの名前は次のようになります...AllResponses_11004_6_11_20132_18_00AM1.txt

助けてください...時間がないので

前もって感謝します

4

1 に答える 1

1

シェルで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 に答える