【问题标题】:Tar.exe can't add 2 files from different foldersTar.exe 无法添加来自不同文件夹的 2 个文件
【发布时间】:2021-10-13 23:44:46
【问题描述】:

我正在尝试使用 tar.exe 将 2 个不同的文件添加到 zip 存档中。 文件夹结构如下:

  • 根文件夹
    • 子目录1
      • 文件1.txt
    • 子目录2
      • 子目录3
        • 文件2.txt
    • 子目录4
      • 文件3.txt
      • File4.txt

我想通过相对路径将 File1、File2 和 SubDirectory4 的所有文件添加到存档中。

我使用的命令是当前目录为 RootFolder:
tar.exe -cf archive.zip -C SubDirectory1 File1.txt -C SubDirectory2\SubDirectory3 File2.txt SubDirectory4

执行后出现如下错误:tar.exe: could not chdir to 'SubDirectory2\SubDirectory3'
我找不到类似的问题,或者 -C 标志的文档也不足以让我理解问题。 有谁知道为什么它不起作用?

【问题讨论】:

    标签: cmd zip tar


    【解决方案1】:

    当你 cd'd 进入 SubDirectory1 时,它成为命令中的当前目录,所以为了将 cd 进入 SubDirectory3\Subdirectory4 你需要使它相对于 SubDirectory1 而不是原始目录。然后当您将cd 转换为SubDirectory4 时,这将需要与SubDirectory3 相关。

    鉴于上述情况,并将RootFolder 作为您的当前目录,请尝试以下操作:

    %SystemRoot%\System32\tar.exe -cf "archive.zip" -C ".\SubDirectory1" "File1.txt" -C "..\SubDirectory2\SubDirectory3" "File2.txt" -C "..\..\SubDirectory4" "File3.txt" "File4.txt"
    

    如果您想要 SubDirectory4 的全部内容,请相应地更改最后一个 glob:

    %SystemRoot%\System32\tar.exe -cf "archive.zip" -C ".\SubDirectory1" "File1.txt" -C "..\SubDirectory2\SubDirectory3" "File2.txt" -C "..\..\SubDirectory4" "*"
    

    我在这里使用双引号作为最佳实践,尽管在您使用提供的文件和目录名称的情况下,如果愿意,可以省略它们。我还使用了默认 Windows 10 版本 tar.exe 的完整路径和扩展名,如果您不关心健壮的代码,并希望赌 %Path%%PATHEXT% 变量没有损坏,那么感觉免费将%SystemRoot%\System32\tar.exe 更改为tar

    【讨论】:

      【解决方案2】:

      Compo 已正确显示 -C 如何相对于 Arc 导航以在没有文件夹的情况下进行存储,因此 他是原始提出问题的正确答案

      >tar -tf archive.zip
      
      File1.txt
      File2.txt
      File3.txt
      File4.txt
      

      但是对于那些正在寻找如何存储相对于根 Arc 的文件的人来说

      使用此方法或变体 记得使用“双引号”表示空格,或者表示“路径名/文件名”

      注意 tar 文件不是 Zip,因此默认情况下不应使用该扩展名。 我正在纠正自己,因为 tar 可以构建有效的 zip 文件。稍后看

      在此始终以完整的方式命名档案,我使用 root 来显示谱系,并使用 .tar 来指示如何提取它。

      tar -f root.tar -c SubDirectory1\File1.txt SubDirectory2\SubDirectory3\File2.txt SubDirectory4\*.*
      

      在稍后提取子文件夹时,它们的内容将相对于根目录保留

      >tar -tf root.tar
      
      SubDirectory1/File1.txt
      SubDirectory2/SubDirectory3/File2.txt
      SubDirectory4/File3.txt
      SubDirectory4/File4.txt
      

      后记

      知道有趣的是,Tar 可以构建一个 valid.zip 并可以列出和提取它们。 (注意报告内容的不同)。

      >tar -tf root.zip
      
      SubDirectory1/File1.txt
      SubDirectory2/SubDirectory3/
      SubDirectory2/SubDirectory3/File2.txt
      SubDirectory4/File3.txt
      SubDirectory4/File4.txt
      

      我们可以简单地提取那些子文件夹(并且没有可见的反馈

      errorlevel 0 All files were processed successfully.
      errorlevel 1 An error occurred.
      

      使用 >tar -xf root.zip

      要构建一个 zip 文件,我们需要添加 -auto 开关

      tar -a -f root.zip -c SubDirectory1\File1.txt SubDirectory2\SubDirectory3\File2.txt SubDirectory4\*.*
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-25
        • 1970-01-01
        • 2013-02-28
        • 1970-01-01
        • 2022-10-17
        • 2022-01-08
        • 2012-05-25
        • 2022-08-14
        相关资源
        最近更新 更多