我知道我可以使用以下命令将单个文件解压缩到当前工作目录(假设我有一个名为test.tar的tar文件,并且其中包含一个名为testfile1和testfile2的文件):
$tar xvf test.tar testfile1
Run Code Online (Sandbox Code Playgroud)
我可以使用-C选项将文件提取到另一个目录:
$tar xvf test.tar -C anotherDirectory/
Run Code Online (Sandbox Code Playgroud)
当我将上述两种技术结合在一起时,我想我可以将一个文件提取到另一个目录中.
$ tar xvf test.tar testfile1 -C anotherDirectory/
Run Code Online (Sandbox Code Playgroud)
但结果是我只能将testfile1提取到当前工作目录,而不是另一个目录.
我想知道如何从tar中提取单个文件到另一个目录?
我正在使用make和tar备份.执行makefile时,tar命令显示file changed as we read it.在这种情况下,
--ignore-failed-read没有帮助.我在MinGW中使用tar 1.23如何在警告后停止tar的警告以停止备份?
编辑-2:可能是原因
正如我上面所说,bash shell脚本在我的旧计算机中运行良好.与旧计算机相比,msys版本不同.tar命令的版本也是如此.在旧计算机中,tar为1.13.19,在新计算机中为1.23.我复制了旧的tar命令,而没有将其依赖项msys-1.0.dll复制到新计算机并将其重命名为tar_old.我还在shell脚本中更新了tar命令并运行脚本.一切都好.所以,似乎问题是tar命令.我确信在去皮时没有任何文件被更改.这是新版本中tar命令的错误吗?我不知道.
编辑-1:添加更多详细信息
备份由bash shell脚本调用.它扫描目标目录并构建makefile然后调用make以使用tar命令进行备份.接下来是由bash shell脚本构建的典型makefile.
#--------------------------------------------
# backup VC
#--------------------------------------------
# the program for packing
PACK_TOOL=tar
# the option for packing tool
PACK_OPTION=cjvf
# M$: C driver
WIN_C_DIR=c:
# M$: D driver
WIN_D_DIR=d:
# M$: where the software is
WIN_PRG_DIR=wuyu/tools
# WIN_PRG_DIR=
# where to save the backup files …Run Code Online (Sandbox Code Playgroud) 当我调用add()一个上tarfile有一个文件路径对象,该文件被添加到与目录层次结构关联的压缩包.换句话说,如果我解压缩tarfile,则会再现原始目录层次结构中的目录.
有没有办法简单地添加一个没有目录信息的普通文件,解压缩生成的tarball产生一个平面的文件列表?
我想知道如何将tar文件的内容列出到某种程度?
我理解tar tvf mytar.tar将列出所有文件,但有时我只希望看到某些级别的目录.
同样,对于该命令ls,如何控制将显示的子目录级别?默认情况下,它只显示直接子目录,但不会更进一步.
如何将tarball中的子目录解压缩到当前目录中?
例如,来自wordpress的tarball :
wordpress/
wordpress/wp-trackback.php
wordpress/wp-config-sample.php
wordpress/wp-settings.php
wordpress/wp-rss2.php
wordpress/readme.html
wordpress/index.php
...
Run Code Online (Sandbox Code Playgroud)
如何将所有内容解压缩wordpress/到当前目录中?换句话说,它不会创建wordpress目录.
我试过这个没有运气:
tar xvfz latest.tar.gz wordpress -C ./
Run Code Online (Sandbox Code Playgroud)
我知道我可以正常提取并将其移回,但我认为必须有一种方法可以一次性完成.
我有一个tar.gz文件,其结构如下:
folder1/img.gif
folder2/img2.gif
folder3/img3.gif
Run Code Online (Sandbox Code Playgroud)
我想提取没有文件夹层次结构的图像文件,因此提取的结果如下所示:
/img.gif
/img2.gif
/img3.gif
Run Code Online (Sandbox Code Playgroud)
我需要结合Unix和PHP来做到这一点.这是我到目前为止,它的工作原理是将它们提取到指定的目录,但保留文件夹层次结构:
exec('gtar --keep-newer-files -xzf images.tgz -C /home/user/public_html/images/',$ret);
Run Code Online (Sandbox Code Playgroud) 我的源代码树包含几个使用Git源代码控制的目录,我需要对整个树进行tarball,不包括对Git元数据或自定义日志文件的任何引用.
我以为我会使用find/egrep/xargs/tar的组合,但不知何故tar文件包含.git目录和*.log文件.
这就是我所拥有的:
find -type f . | egrep -v '\.git|\.log' | xargs tar rvf ~/app.tar
Run Code Online (Sandbox Code Playgroud)
有人能在这里解释我的误会吗?为什么tar处理find和egrep正在过滤的文件?
我也对其他技术持开放态度.