Existe um único comando que permite extrair my_dir para um diretório especificado?
Sim. Use a opção e
em vez de x
:
7za e -y archive.7z -o/path/to/target_dir my_dir
( x
é extraído com caminhos completos )
e (Extract) command
Extracts files from an archive to the current directory or to the output directory. The output directory can be specified by -o (Set Output Directory) switch.
This command copies all extracted files to one directory. If you want extract files with full paths, you must use x (Extract with full paths) command.
Fonte comando e (extrair)
Mas, na verdade, a pasta no arquivo contém subpastas que eu gostaria de preservar
Nesse caso, você precisa usar o comando original (com x
) e, em seguida, usar move
para mover o conteúdo de my_dir
para um nível superior.
Algo semelhante ao seguinte arquivo em lote (não testado):
@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
Na linha de comando:
7za x -y archive.7z -o/path/to/target_dir my_dir && move /y my_dir\* /path/to/target_dir && rd /s my_dir
Mas estou usando o Linux!
Em seguida, os comandos a usar são:
#!/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
Ou:
7za x -y archive.7z -o/path/to/target_dir my_dir && mv -f my_dir/* /path/to/target_dir && rmdir my_dir
O que provavelmente pode ser simplificado por alguém que conheça bash
melhor do que eu.