根据新信息,我重新表述了这个问题。旧信息如下,以免使基于它的答案和评论无效。
我有一个tarball.tar
要解压缩到的 tarball destination
,一个与我当前工作目录不同的目录,所以我使用 tar 的-C
选项,它可以满足我的需求。
但是,如果我尝试指定要从 tarball 中提取的文件,该-C
选项似乎被忽略了。这些文件被提取到我当前的工作目录中。
tar -xf tarball.tar -C destination
Tar的版本是
$ tar --version
tar (GNU tar) 1.28
这是一个错误还是我的理解-C
错误?
最小的工作示例
这是一个显示行为的 bash 脚本。将其存储(或执行)在空目录中
#!/bin/bash -x
set -e # Abort if any of these commands fails
touch file1 file2 file3 # Create files to be archived
tar -cf tarball.tar file1 file2 file3 # Create the archive
rm file1 file2 file3 # Remove source files
tar -tf tarball.tar # Should contain files 1–3
mkdir -p destination # Create destination directory
tar -xf tarball.tar file1 file2 -C destination # Extract two files from
#+ tarball into destination directory
ls . # Should contain only the script itself,
#+ tarball.tar, and destination
ls destination # Should contain file1 and file 2
如果我执行脚本,destination
则为空并ls .
返回
$ ls .
file1 file2 tarball.tar tar.sh
如果我没有指定要提取的文件(因此
tar -xf tarball.tar file1 file2 -C destination
第 9 行变为
tar -xf tarball -C destination
),则行为符合预期。ls destination
显示file1 file2 file3
。
老问题(忽略这个)
我有一个 tar 存档/path/to/backup.tar.gz
,其中包含目录home/bleistift2/stuff
和home/bleistift2/more_stuff
.
为了将这两个目录提取到/home/bleistift2/tmp
(在文件系统中,而不是存档中),我发出以下命令。我的理解是-C
指定提取位置。目标目录存在。
tar -zxvf /path/to/backup.tar.gz \ # The archive to extract
home/bleistift2/stuff home/bleistift2/more_stuff \ # The contents to extract
--same-owner -C /home/bleistift2/tmp # The destination directory
但是,这些目录存储为存档的兄弟姐妹,所以我最终使用/path/to/home/bleistift2/{stuff, more_stuff}
而不是/home/bleistift2/tmp/home/bleistift2/{stuff, more_stuff}
.