将 7z 存档中的文件夹内容提取到特定文件夹

将 7z 存档中的文件夹内容提取到特定文件夹

我有一个 7z 存档文件,它在“根”级别包含几个文件,然后是一个目录,该目录又包含文件和文件夹,如下所示:

- file1.txt
- file2.txt
- my_dir
    - file3.txt
    - file4.txt
    - another_dir
        - file5.txt
        - file6.txt

我想知道是否有一个命令可以让我提取内容my_dir我选择的目录中,最终结果是:

- target_dir
    - file3.txt
    - file4.txt
    - another_dir
        - file5.txt
        - file6.txt

我已经尝试过以下命令:

7za x -y archive.7z -o/path/to/target_dir my_dir
7za x -y archive.7z -o/path/to/target_dir 'my_dir/*'

但都创建了这个目录结构:

- target_dir
    - my_dir
        - file3.txt
        - file4.txt
        - another_dir
            - file5.txt
            - file6.txt

答案1

是否有一个命令可以将 my_dir 提取到指定目录?

是的。请使用该e选项代替x

7za e -y archive.7z -o/path/to/target_dir my_dir

x是提取自完整路径

e(提取)命令

将文件从存档提取到当前目录或输出目录。输出目录可以通过 -o(设置输出目录)开关指定。

此命令将所有解压的文件复制到一个目录中。如果要使用完整路径提取文件,则必须使用 x(使用完整路径提取)命令。

来源e(提取)命令


但实际上档案中的文件夹包含我想要保留的子文件夹

在这种情况下您需要使用原始命令(带有x),然后使用move将内容移动my_dir到上一级。

类似于以下批处理文件(未经测试):

@echo off
7za x -y archive.7z -o/path/to/target_dir my_dir
move /y my_dir\* /path/to/target_dir
rd /s my_dir
endlocal

从命令行:

7za x -y archive.7z -o/path/to/target_dir my_dir && move /y my_dir\* /path/to/target_dir && rd /s my_dir

但是我使用的是 Linux!

然后要使用的命令是:

#!/bin/bash
7za x -y archive.7z -o/path/to/target_dir my_dir
mv -f my_dir/* /path/to/target_dir
rmdir my_dir

或者:

7za x -y archive.7z -o/path/to/target_dir my_dir && mv -f my_dir/* /path/to/target_dir && rmdir my_dir

bash比我更了解的人也许可以简化这一点。


进一步阅读

答案2

管理多个档案

不确定在第一次提出问题时这是否可行,但有一个更简单的解决方案,可以同时使用xex保留文件夹结构,e展平所有内容,因此您要查找的是x):

7z x archive.7z -opath/to/dir

两个开关(这里、x-o)都支持通配符:

7z x *.7z -o*

这会将当前目录中的所有 .7z 档案提取到具有相同名称的新子目录中。

来源:-o(设置输出目录)开关

过滤仅提取文件夹

如果要过滤的文件类型已知,例如.txt您的示例,7z x archive.7z -opath/to/dir -x!*.txt则可行。或者,您可以过滤掉所有包含点 ( .) 的名称,这样每个文件都会被排除: 。请注意,这还会过滤掉名称中7z x archive.7z -opath/to/dir -x!*.*包含点 ( ) 的任何文件夹.

相关内容