0

FTP サーバーで受信するファイルのリストを作成する KSH の単純なスクリプトがあります。

sF_Array=(` find . -type f ...  `)
sF_len=${#sF_Array[*]}
for name in ${sF_Array[@]}
do
   basename "$name"          # This removes the leading slashdot
done>$ddw_data/FTP_FILE_LIST

課題は、一部のファイルにスペースが含まれていることです (ファイルは MS Windows マシンから送信されます)。rename

for name in ${sF_Array[@]}
do
   rename 's/ /_/g' "$name"  # This removes spaces in file names
   basename "$name"          # This removes the leading slashdot
done>$ddw_data/FTP_FILE_LIST

しかし、それは機能しません。これはFTP_FILE_LIST次のようになります (2 番目と 3 番目のレコード/ファイル名に注意してください)。

TCA~PRE~PREP~9939985~ONTDTVE3A~33~F~3922~R22-100~000806451655~20130819~040320.XML
J
MEM~ETT~CVT~654687-MEMTO~jgm16227~1~P~1100~R24-500~033068658187~20130813~234639.XML
J
MEM~FUN~TEST~312326-MEMTO~jgm16227~2~P~1100~R24-200~035696412416~20130813~234638.XML
J-MEM~DCA~FVT~5333131~ONTDTVD1C~1~F~3420~DECA1MR0-01~XED1B1201A3313~20130827~201916.XML
TCA~COS~COSM~95518585~ONTDTVE7A~63~F~3911~R22-300~00065881346~20130817~000300.XML

FTP_FILE_LIST代わりに次のようにしたい (2 番目と 3 番目のレコード/ファイル名に注意してください):

TCA~PRE~PREP~9939985~ONTDTVE3A~33~F~3922~R22-100~000806451655~20130819~040320.XML
J_MEM~ETT~CVT~654687-MEMTO~jgm16227~1~P~1100~R24-500~033068658187~20130813~234639.XML
J_MEM~FUN~TEST~312326-MEMTO~jgm16227~2~P~1100~R24-200~035696412416~20130813~234638.XML
J-MEM~DCA~FVT~5333131~ONTDTVD1C~1~F~3420~DECA1MR0-01~XED1B1201A3313~20130827~201916.XML
TCA~COS~COSM~95518585~ONTDTVE7A~63~F~3911~R22-300~00065881346~20130817~000300.XML

私は何が欠けていますか??

4

2 に答える 2

0

rename変数を変更するのではなく、実際のファイルの名前を変更します。trまたは何かを使用して、ファイル名をインラインで修正します。

basename "$(echo "$name" | tr " " "_")"
于 2013-08-30T16:40:55.783 に答える
0

スクリプトに 2 つの個別のタスクを作成して、問題を解決しました。

1)スペースを含むファイルの名前を変更する

find . -type f \( ...\) | while read file
do
        target=`echo "$file" | sed 's/ /_/g'`
        mv "$file" "$target"
done

2) ファイルリストを作成する

sF_Array=(` find . -type f ...  `)
sF_len=${#sF_Array[*]}
for name in ${sF_Array[@]}
do
   basename "$name"          # This removes the leading slashdot
done>$ddw_data/FTP_FILE_LIST

このように機能しますが、1 つのステップで機能しないのは興味深いことです。

御時間ありがとうございます。

于 2013-08-30T17:53:45.780 に答える