【问题标题】:tar --excludes option to exclude only the directory at current working directory, not subdirectoriestar --excludes 选项仅排除当前工作目录中的目录,不排除子目录
【发布时间】:2014-06-13 04:53:15
【问题描述】:

我想 tar/zip 目录 ./(当前工作目录)并排除目录 ./vendor 中的文件,我碰巧在 ./public/web/vendor 也有一个名为 vendor 的子目录,但我想保持那个。我试过了:

tar cfz /private/var/folders/temp/mage6BRQWJ.tar.gz  --exclude=vendor/*     ./
tar cfz /private/var/folders/temp/mage6BRQWJ.tar.gz  --exclude=./vendor/*   ./
tar cfz /private/var/folders/temp/mage6BRQWJ.tar.gz  --exclude="vendor/*"     ./

但这些都排除了子目录。

我想使用相对路径,因为我也想从所有目录中排除所有 .svn(例如示例)文件。

有没有办法使用相对路径来排除 ./vendor 目录中的文件,而不是 ./public/web/vendor ?

【问题讨论】:

    标签: tar


    【解决方案1】:

    您只需要--anchored 标签:

    GNU 焦油:

    tar cfz mage6BRQWJ.tar.gz --anchored --exclude=vendor *
    

    bsdtar:

    bsdtar -czf mage6BRQWJ-1.tar.gz --exclude=^vendor *
    

    这行得通。

    【讨论】:

    • 我试过了,--anchored 在我的 tar 版本中不可用。 (bsdtar)
    • 无赖。我在 Linux 上有一个较旧的 tar 1.26,--anchored 修改了 --include--exclude 以使 patterns match file name start 与默认的 --no-anchored 相比,其中模式在任何“/”之后匹配.有没有办法可以修补您的版本。我会检查 bsdtar,但 GNU tar 制作是微不足道的。
    • 我认为解决了它--exclude=^vendor
    • 谢谢!!找不到任何关于 ^
    • 它不在手册页中,但查看 GNU tar 使用的逻辑,似乎可以通过将排除模式与正常的 ^ 开头锚定在 bsdtar 中完成类似的操作字符串字符。很高兴它奏效了。请参阅:“即使是盲松鼠也会偶尔发现一颗坚果。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多