【问题标题】:Unable to untar a file?无法解压文件?
【发布时间】:2009-08-28 06:59:03
【问题描述】:

我编写了一个 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 组成。

【问题讨论】:

  • 对不起,这是 PHP 吗?或者这是什么语言?
  • shell 脚本........

标签: linux unix ftp shell tar


【解决方案1】:

您获得了.tar 文件,但使用z 选项解压缩它。压缩文件(需要z 的文件)通常具有.tar.gz 前缀。试试

tar xvf $next *required_file_in_tar_file*.dat

【讨论】:

  • 当我在命令行中执行这个命令时它工作得很好。但在脚本中它不起作用 tar:my_required_file_in_tar_file_123.dat :在档案中找不到,但该文件在档案内......
  • 您是否考虑过引用第二个参数(带星号的那个)?
  • 我写的和你提到的一样,并尝试过其他类型。我能够在命令行中完成所有这些操作,但是当我运行脚本时无法解压文件。
  • “不能”说什么? (顺便说一句,你为什么不for next in localpath/* 而不是生成另一个 ls?在某些情况下可能会用着色转义序列污染你的 tar 名称)。
  • 在 ftp 之后,如果我把 cd localpath 放到 un tar 所需的文件中......谢谢你......
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2020-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 2023-01-25
      • 2017-04-18
      • 1970-01-01
      相关资源
      最近更新 更多