我以为这是一个很容易回答的问题,但无论我走到哪里,每个人都希望 tar 与 shell 位于同一目录中。
我的文件位于:
/tmp/my_file.tar.gz
我想将其解压到以下目录:
/opt/
我的 shell 目前位于:
~/
答案1
GNU
tar
有一个-C
(或--directory
)选项可供您使用。例如tar -C /opt -x -z -f /tmp/my_file.tar.gz
或者
你可以使用一个简单的子shell。例如
(cd /opt; tar -xvzf /tmp/my_file.tar.gz)
在此之后,您的当前目录仍为
~/
,cd
只会影响子 shell。此方法对于缺少选项或等效选项的命令和实用程序很有用-C
。
请注意,必须确保 tar 文件中存储的路径是相对路径不是绝对路径。这由用于创建 tar 文件的命令决定。您可以使用tar -tzf ...
并检查路径的第一个字符来检查这一点(例如/foo/...
是绝对路径,foo/...
还是./foo/...
相对路径)。如果以 root 身份运行此操作,请特别小心。如果在一长串相对路径中出现/etc/passwd
或更糟糕的情况,您将会陷入困境。但请参阅GNU tar -P 选项- 这可能在您的特定平台上不会出现问题。我会在继续操作之前仔细检查。