是否可以在目录 A 中运行 tar 命令,该命令会根据目录 C 中的文件在目录 B 中创建 tar 存档?

是否可以在目录 A 中运行 tar 命令,该命令会根据目录 C 中的文件在目录 B 中创建 tar 存档?

以下是我的开始:

ls "$A"
<current_directory>
ls "$B"
<nothing>
ls "$C"
my_file

这就是我想要的结果:

tar -vczf <magic> "${B}/my_archive.tar.gz" "${C}/my_file"
ls "$B"
my_archive.tar.gz # contains my_file at root of archive (no directory)
pwd
<still in A>

我已经通读了 tar 手册页好几遍了。我唯一的结论是,如果按字母顺序列出标志而不是按功能分组,阅读起来会更容易。;-| 我觉得这个问题应该可以通过一些涉及 -C 标志的咒语来解决,但这似乎只有助于在 C 中获取文件。我也一直在尝试通过各种迭代来克服 tar 的局限性:

pushd "$B"
tar -vczf <magic> "my_archive.tar.gz" "${C}/my_file"
popd

最后的解决办法是:

pushd "$C"
tar -vczf my_archive.tar.gz my_file
mv my_archive.tar.gz "$B"
popd

这是目前唯一有效的方法。不过有 4 个命令!?一定有更好的方法。

相关 XKCD

答案1

假设$A$B$C绝对路径,则

tar -C "$C" -czf "$B/my_archive.tar.gz" "my_file"

应该可以工作:该-C参数转换为“在执行任何操作之前更改为 DIR。此选项对顺序敏感,即它会影响后面的所有选项。”

您需要$(realpath $A)和朋友一起修复相对路径。

相关内容