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

Mat*_*ari 14 linux command-line 7-zip

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

- file1.txt
- file2.txt
- my_dir
    - file3.txt
    - file4.txt
    - another_dir
        - file5.txt
        - file6.txt
Run Code Online (Sandbox Code Playgroud)

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

- target_dir
    - file3.txt
    - file4.txt
    - another_dir
        - file5.txt
        - file6.txt
Run Code Online (Sandbox Code Playgroud)

我试过这些命令:

7za x -y archive.7z -o/path/to/target_dir my_dir
7za x -y archive.7z -o/path/to/target_dir 'my_dir/*'
Run Code Online (Sandbox Code Playgroud)

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

- target_dir
    - my_dir
        - file3.txt
        - file4.txt
        - another_dir
            - file5.txt
            - file6.txt
Run Code Online (Sandbox Code Playgroud)

Dav*_*ill 16

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

是的。使用该e选项而不是x

7za e -y archive.7z -o/path/to/target_dir my_dir
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

从命令行:

7za x -y archive.7z -o/path/to/target_dir my_dir && move /y my_dir\* /path/to/target_dir && rd /s my_dir
Run Code Online (Sandbox Code Playgroud)

但是我用的是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
Run Code Online (Sandbox Code Playgroud)

或者:

7za x -y archive.7z -o/path/to/target_dir my_dir && mv -f my_dir/* /path/to/target_dir && rmdir my_dir
Run Code Online (Sandbox Code Playgroud)

这可能会被bash比我更了解的人简化。


进一步阅读