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
是的。使用该e
选项而不是x
:
7za e -y archive.7z -o/path/to/target_dir my_dir
Run Code Online (Sandbox Code Playgroud)
(x
是带有完整路径的提取物)
e(提取)命令
将档案中的文件提取到当前目录或输出目录。输出目录可以通过 -o(设置输出目录)开关指定。
此命令将所有提取的文件复制到一个目录。如果要提取具有完整路径的文件,则必须使用 x(以完整路径提取)命令。
在这种情况下,您需要使用原始命令(带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)
然后使用的命令是:
#!/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
比我更了解的人简化。
归档时间: |
|
查看次数: |
17864 次 |
最近记录: |