Tar 忽略 --directory 选项

Tar 忽略 --directory 选项

我正在尝试获取一个目录并从另一个位置在我的主目录中创建它的存档。我知道该-C选项可以用于此目的,但tar似乎忽略了它。我已经尝试过我要存档的目录的路径在$(basename $DEST)_$(date +%F_%H%M%S).tar.gz -C $HOME $(basename $DEST)哪里。 $DESTtar 没有在我的主目录中创建存档,而是继续在我执行它的目录中创建它。我执行 tar 的方式有问题吗?其他一切似乎都工作正常,只是该-C标志被完全忽略了。我使用的是 Linux Mint 18.3 XFCE 版本。

编辑:完整的命令是tar czf Pictures_$CREATION_TIMESTAMP.tar.gz -C /home/$USER Pictures.我是从 执行它的/home/$USER/coding/python_code/

答案1

-C不影响存档的创建位置。它仅影响将哪些文件添加到存档中。因此,例如,给定tar cvf foo.tar a -C /b c -C /d e,将从当前目录tar添加,切换到并添加,切换到并添加。其本身将在当前目录(原来的目录)中创建。a/bc/defoo.tara

如果命令行上没有给出用于添加的文件,但-C /some/dir使用了,tar则将切换到/some/dir并将其中的所有内容添加到存档中。

(相应地,解压时,-C不会影响在哪里tar查找存档文件。它只会影响解压后的文件的去向。)

因此:tar czf Pictures_$CREATION_TIMESTAMP.tar.gz -C /home/$USER Picturesfrom/home/$USER/coding/python_code/将始终在 中创建存档/home/$USER/coding/python_code/,目录为Picturesfrom /home/$USER

如果您想要在 中创建的存档中Pictures的目录,则必须创建存档:/home/$USER/home/$USERcd/home/$USER

cd "/home/$USER"; tar czf "Pictures_$CREATION_TIMESTAMP.tar.gz" Pictures

或者,指定存档的路径:

tar czf "/home/$USER/Pictures_$CREATION_TIMESTAMP.tar.gz" -C "/home/$USER" Pictures

答案2

从最近的tar手册页:

-C,--directory=目录

在执行任何操作之前更改为 DIR。该选项是顺序敏感的,即它会影响后面的所有选项

因此,例如,归档目录的正确方法/srv/www是:

tar -C /srv/www -czf www.tgz

(请注意,由于您必须以 <directort> 开头,因此您需要用 a-C表示,以便将它们理解为选项。)-czf-

当然,您始终可以cd明确地执行以下操作:

(cd /srv/www; tar czf - .) > www.tgz

答案3

感谢您的编辑。

看起来您正在使用 shell 变量和命令替换来指定要存档的文件名和目录。

这将满足您的需要:

tar czfv $HOME'/Pictures_'$CREATION_TIMESTAMP'.tar.gz' "$DEST" -C Pictures

我添加了v它以使其变得详细,以便您可以看到发生了什么。该$HOME变量显然扩展到您的主目录,我认为 $CREATION_TIMESTAMP 是一个时间变量。您声明$DEST指定了您尝试存档的目录的路径,因此它位于通常所在的末尾。我在 周围加了双引号,$DEST以防路径包含空格,但如果不包含空格,则可以删除它们。如果 $CREATION_TIMESTAMP 等于上面的内容,$(date +%F_%H%M%S)那么它不会有空格,因此不需要双引号。删除-C嵌套,以便仅Pictures进行压缩。

相关内容