2009-08-28 124 views
0

我寫了一個shell腳本,它試圖從ftp服務器上拉出一個tar文件並在本地解壓縮它。我需要從tar歸檔文件中提取特定的文件。 tarfile的文件名包含一個日期;我需要能夠根據這個日期選擇一個tar文件。無法解壓文件?

abc_myfile_$date.tar是我從ftp服務器提取的文件的格式。

我當前的代碼如下所示:

for host in ftpserver 
do 
ftp -inv host <<END_SCRIPT 
user username password 
prompt 
cd remotepath 
lcd localpath 
mget *myfile_$date*.tar 
quit 
END_SCRIPT 
done 

for next in `ls localpath/*.tar` 
do 
tar xvf $next *required_file_in_tar_file*.dat 
done 

當我運行該腳本,我不能夠解壓文件

我能夠得到從FTP服務器的單個tar文件只有當我提及該文件的確切名稱。我想獲得一個名稱爲myfile_$date的文件。在此之後,我想將其解壓到本地路徑,以獲取名稱由我的required_files組成的tar文件中的指定文件。

+0

對不起,但是這個PHP?或者這是什麼語言? – 2009-08-28 07:06:15

+0

這是一個shell腳本。 – 2009-08-28 07:09:36

+0

heh ...我走了.. – 2009-08-28 07:10:23

回答

2

你得到.tar文件,但是用z選項解壓。壓縮文件(需要z的文件)通常有.tar.gz前綴。嘗試

tar xvf $next *required_file_in_tar_file*.dat 
+0

當我在命令行中執行此命令時,它的工作完美無缺。 但腳本它不工作 焦油my_required_file_in_tar_file_123.dat:在archieve 沒有找到,但該文件是archieve內... – musicking123 2009-08-28 07:38:14

+0

你認爲引述第二個參數(一個星號)? – 2009-08-28 07:57:39

+0

我寫過和你提到的一樣的東西,並且試過其他類型的東西。 能夠在命令行 中完成所有這些,但是當我運行腳本時無法解壓文件。 – musicking123 2009-08-28 08:24:34

1

我不太確定,但FTP協議沒有命令mget如果你想下載多個文件? (而不是get

2

首先,如果你想使用的文件名,你需要從你到MGET使用,而不是讓服務器獲取通配符。通配符文件擴展(*)不適用於get命令。
一旦你拉動文件,tar操作將按預期工作,大多數現代版本的linux/bsd都有一個'smart'tar,它不需要'z'命令來指定tar文件被壓縮 - 他們會發現壓縮包自動壓縮並自動解壓縮,在系統上提供相應的壓縮/解壓縮工具(bzip2用於.jz文件,gzip用於.gz文件)。