J'ai un fichier d'archive 7z qui, au niveau "racine", contient quelques fichiers, puis un répertoire, qui contient à la fois des fichiers et des dossiers, comme ceci:
- file1.txt
- file2.txt
- my_dir
- file3.txt
- file4.txt
- another_dir
- file5.txt
- file6.txt
J'aimerais savoir s'il existe une seule commande qui me permet d'extraire le contenu de my_dir
dans un répertoire de mon choix de manière à obtenir le résultat final. :
- target_dir
- file3.txt
- file4.txt
- another_dir
- file5.txt
- file6.txt
J'ai essayé ces commandes:
7za x -y archive.7z -o/path/to/target_dir my_dir
7za x -y archive.7z -o/path/to/target_dir 'my_dir/*'
mais les deux ont créé cette structure de répertoire:
- target_dir
- my_dir
- file3.txt
- file4.txt
- another_dir
- file5.txt
- file6.txt
Oui. Utilisez l'option e
au lieu de x
:
7za e -y archive.7z -o/path/to/target_dir my_dir
(x
est Extrait avec les chemins complets )
e (Extraire) commande
Extrait les fichiers d'une archive dans le répertoire actuel ou dans le répertoire de sortie. Le répertoire de sortie peut être spécifié par le commutateur -o (Set Output Directory).
Cette commande copie tous les fichiers extraits dans un répertoire. Si vous souhaitez extraire des fichiers avec des chemins d'accès complets, vous devez utiliser la commande x (Extraire avec des chemins d'accès complets).
Source Commande e (extraire)
Dans ce cas, vous devez utiliser la commande d'origine (avec x
), puis utiliser move
pour déplacer le contenu de my_dir
d'un niveau.
Quelque chose comme le fichier batch suivant (non testé):
@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
A partir de la ligne de commande:
7za x -y archive.7z -o/path/to/target_dir my_dir && move /y my_dir\* /path/to/target_dir && rd /s my_dir
Ensuite, les commandes à utiliser sont:
#!/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
Ce qui peut probablement être simplifié par quelqu'un qui connaît bash
mieux que moi.