以下是我的开始:
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 个命令!?一定有更好的方法。
答案1
假设$A
和$B
是$C
绝对路径,则
tar -C "$C" -czf "$B/my_archive.tar.gz" "my_file"
应该可以工作:该-C
参数转换为“在执行任何操作之前更改为 DIR。此选项对顺序敏感,即它会影响后面的所有选项。”
您需要$(realpath $A)
和朋友一起修复相对路径。