0

我编写了一个 shellscript,它试图从 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名称中的文件。在此之后,我想将其提取到本地路径以获取该 tar 文件中的指定文件,其名称由我的required_files.

4

3 回答 3

2

您得到.tar文件,但使用z选项解压缩它。压缩文件(那些需要z)通常有.tar.gz前缀。尝试

tar xvf $next *required_file_in_tar_file*.dat
于 2009-08-28T07:09:04.463 回答
2

首先,如果要对从服务器获取的文件名使用通配符,则需要使用 mget 而不是 get。通配符文件扩展(*)不适用于 get 命令。
提取文件后,tar 操作将按预期工作,大多数现代版本的 linux/bsd 都有一个“智能”tar,它不需要“z”命令来指定 tar 文件是压缩的——它们会找出 tarball 自己压缩并自动解压缩,前提是系统上有适当的压缩/解压缩工具(bzip2 用于 .jz 文件,gzip 用于 .gz 文件)。

于 2009-08-28T07:15:21.550 回答
1

我不太确定,但是mget如果您想下载多个文件,FTP 协议是否没有命令?(而不是get

于 2009-08-28T07:07:38.600 回答