2009-08-28 120 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文件)。