Shell 将一个文件夹标记为另一个目录

Shell 将一个文件夹标记为另一个目录,shell,tar,Shell,Tar,我正在尝试创建一个bash脚本,该脚本创建一个文件夹(或文件夹内容)到特定目录的存档 我的版本可以工作,但它只归档了一个文件夹,它归档了我不想要的整个路径。 有没有一种不用cd就能解决这个问题的方法?我看到了一些使用-C的解决方案,但无论我将其放置在何处,都会出现以下错误:拒绝创建空存档 SRCDIR=~/Documents/sub1/sub2/sub3/source/* DESTDIR=~/Documents/sub1/sub2/sub3/target/backup.tgz tar czf $

我正在尝试创建一个bash脚本,该脚本创建一个文件夹(或文件夹内容)到特定目录的存档

我的版本可以工作,但它只归档了一个文件夹,它归档了我不想要的整个路径。 有没有一种不用cd就能解决这个问题的方法?我看到了一些使用
-C
的解决方案,但无论我将其放置在何处,都会出现以下错误:
拒绝创建空存档

SRCDIR=~/Documents/sub1/sub2/sub3/source/*
DESTDIR=~/Documents/sub1/sub2/sub3/target/backup.tgz
tar czf $DESTDIR  --absolute-names  $SRCDIR
您可以尝试以下方法:

SRCDIR=~/Documents/sub1/sub2/sub3/source/*
DESTDIR=~/Documents/sub1/sub2/sub3/target/backup.tgz
tar czf $DESTDIR --absolute-names -C $(dirname $SRCDIR) $(basename $SRCDIR)
正如您在我的示例中所看到的,我使用-C选项结合源目录的dirname和basename来更改目录

OTHER OPTIONS

  -C, --directory DIR
       change to directory DIR

通常,在使用'-C'时,通配符扩展不起作用,因为它会尝试在调用命令的当前目录而不是在SRCDIR位置扩展通配符('*')

如果希望所有文件都包含在存储库中,请使用“.”(它还将包含隐藏文件!)


作为旁注,原始帖子使用了“--绝对名称”。您可能需要重新考虑使用此标志,因为它使得将文件还原到除文件原始位置以外的任何其他位置都非常困难。

谢谢您的回答。我只使用了--absolute名称,因为我遇到了以下错误:tar:删除前导“/”from@ThinkCode. 这个信息只是一个警告。如果使用建议的解决方案,您将无法获得它。我已经修复了发布的代码以消除它。
SRCDIR=~/Documents/sub1/sub2/sub3/source/*
DESTDIR=~/Documents/sub1/sub2/sub3/target/backup.tgz
tar czf $DESTDIR -C "$(dirname $SRCDIR)" .