2012-03-21 59 views
1

我仍然在shell腳本一個新手,並想使我收到賬單文件的一些備份,然後上傳這些FTP服務器目錄,完成後將該文件歸檔到一個名爲歸檔的新目錄中。這裏是什麼絆倒了我,讓提取任意文件名的子串在bash腳本變量輸出,用於FTP推送和歸檔腳本

計費文件與隨機子路線發送包含(020001.030002.XXXXX.01.2當然其中XXXXXX是每天更換)。我需要做的就是使用類似awk的方法找到文件名中的子字符串,將其複製到一個變量中,以便我可以使用它將文件名推送到FTP服務器,然後對文件進行歸檔。然後我需要將變量放置在類似於FILE = 020001.030002($ VARIABLE).01.2的東西中。

我位於this post on stackoverflow這是性質相似,但因爲我有一個隨機輸入文件,每次我都有困難如何完成這項任務。如果這不是通過shell腳本可以完成的事情,還有另一種方式(Python等)來完成這項任務嗎?


樣品文件名 - 他們再次隨機我的計費服務器創建:(注意:沒有這些文件的結尾有分機)

  • 020001.030002.00320.01.2
  • 020001.030002。 07243.01.2
  • 020001.030002.12048.01.2

要求的格式應該把這個文件名不變被放置在一個FTP腳本用於上傳如:

#/bin/bash 
FTPU="user" # ftp login name 
FTPP="passwd" # ftp password 
FTPS="ftp.server.com" # remote ftp server 
FTPF="/home/backup/" # remote ftp server directory for $FTPU & $FTPP 
LOCALFILE="020001.030002.($INSERT_VARIABLE_HERE).01.2" 
ncftpput -m -u $FTPU -p $FTPP $FTPS $FTPF $LOCALFILE 
+0

目前還不清楚(我的)原始文件名,與XXXXX是如何從FILE = ... $ {變量} ...有什麼不同,當變量= XXXXX 。兩者都有5'。'在每個部分用數字分隔的部分。你可以編輯你的問題,包括2-3個樣本文件名,以及所需格式的更改版本?請注意編輯框頂部的格式「工具欄」。 {}將會格式化,以便您的線條不會合並在一起。祝你好運。 – shellter 2012-03-21 19:26:28

+0

到達那裏!良好的第一篇文章..還是不明白怎麼'LOCALFILE = 「020001.030002。($ INSERT_VARIABLE_HERE).01.2」'是不同的充從'020001.030002.00320.01.2'或'020001.030002.07243.01.2'或....請編輯再次顯示您認爲'$ {INSERT_VARIABLE_HERE}'的樣子。或者,你說的'020001.030002。,。01.2'部分實際上改變這一切的時候,你要減少哪些內容保存爲新的文件名一個std部分1,2,4,5,只有捕獲的是第3部分改變文件名?祝你好運。 – shellter 2012-03-21 20:13:01

回答

0
f=020001.030002.00320.01.2 
id=${f:14:5} 
echo $id 

結果:

00320 

隨着

id=${f:14:5} 

從位置提取14 5個字符。


替代做法:

f=020001.030002.00320.01.2 
end=${f/020001.030002./} 
echo $end 
00320.01.2 
core=${end/.01.2/} 
echo $core 
00320 
+0

但因爲我不知道什麼f的將是在任何一天是有辦法來自動確定從目錄路徑F到進一步自動化這個,所以我可以由cron腳本? – psiphix 2012-03-21 20:25:14

+0

@psiphix:你在哪裏收到文件?你現在怎麼樣纔是新文件?它是目錄中唯一的文件嗎? – 2012-03-21 20:42:24

+0

/home/username/frombilling將文件壓入到ftp目錄後我會將文件歸檔並附加日期,就像這樣(我也在這裏丟失了變量: 'date_formatted = $(date +%m %d%y%H%M) cp -r $ 1 $ 2. $ date_formatted' – psiphix 2012-03-21 21:21:26