J'ai un fichier myarchive.zip qui contient de nombreux répertoires, fichiers, etc. Disons que ce fichier myarchive.zip réside dans un répertoire appelé "b". Eh bien, lorsque j’utilise la commande "unzip myarchive.zip", le système crée par défaut un répertoire appelé "myarchive" avec le contenu du fichier zip. Je ne souhaite pas que le système crée ce répertoire "myarchive" - je souhaite simplement que le contenu soit extrait dans le répertoire "b". Est-ce possible?
Ce que je fais maintenant consiste simplement à lancer une commande "cp" pour copier les fichiers du répertoire nouvellement créé (dans ce cas, "myarchive" vers "b") vers l'emplacement souhaité.
unzip
ne crée pas de répertoire. Votre fichier zip a probablement le répertoire au plus haut niveau.mv
au lieu decp
.mv archive/* .; rmdir archive/
ou similaire.Réponses:
Ma version de
unzip
a une-j
option pour ne créer aucun répertoire.Alors
Extrait tous les fichiers du répertoire en cours sans restaurer la structure de répertoires stockée dans le
zip
fichier.Si vous souhaitez supprimer uniquement un niveau de répertoires de l'archive (extraire
myarchive/dir/file
au lieu dedir/file
,file
n'utilisez pas ), vous pouvez utiliserbsdtar
(qui prend en charge leszip
fichiers en plus destar
fichiers) à la place et son-s
option.la source
-j
la structure du répertoire d'archivage, elle n'est pas recréée et tous les fichiers sont déposés dans le dossier d'extraction. Cela signifie que TOUS les sous-dossiers sont supprimés. Donc, si vous en aviezzip/A/f1
,zip/A/B/f2
etzip/A/B/C/f3
vous vous retrouveriez avec un seul dossier avec f1, f2, f3. Cela devient amusant si vous avez des fichiers avec le même nom dans différents sous-dossiers. Habituellement, vous voulez simplement supprimer le dossier principal et non la structure de répertoires complète.On dirait que c'est très simple avec bsdtar :
bsdtar --strip-components=1 -xvf file.zip
la source
Ce que la réponse acceptée ne spécifie pas comment faire, comme vous le dites dans la question, si vous souhaitez encore extraire vers un dossier spécifique sans utiliser les chemins de dossiers stockés dans les fichiers zip, vous pouvez utiliser l'
-j
option with-d
de cette manière. :ou pour votre cas
la source
Si effectuer
unzip myarchive.zip
produit un répertoiremyarchive
avec tout ce qu'il contient, cela signifie que le créateur du fichier zip a effectivement effectué le zip sur ce répertoire.La seule façon de créer ce que vous voulez est de simplement déplacer tout le contenu en dehors du répertoire après avoir effectué
unzip
:[user@host]:some/path/b$ unzip myarchive.zip
[user@host]:some/path/b$ ls
{ montre le répertoiremyarchive
}[user@host]:some/path/b$ mv myarchive/* .
[user@host]:some/path/b$ rm -R myarchive
[user@host]:some/path/b$ ls
{ montre le premier niveau de myarchive (directement dansb
) }la source
mv myarchive/.* .
de déplacer tous les fichiers cachés comme .gitignore et .htaccess.rm -R
et parce que vous ne l'utilisez pas,ls -a
vous n'indiquez pas s'il existe des fichiers point; maintenant que se passe-t-il quand vous courezrm -R
et qu'il y a des fichiers de points? Vous ne les avez pas copiés, ils sont donc perdus. Vous devriez vraiment résoudre ce problème et peut-être expliquer la différence parce que c'est quelque chose qui va beaucoup faire trébucher les débutants; et considérez ceci: et si ce n'est pas une archive qu'ils ont? Ou si ils ajoutent à la commande pour supprimer l'archive une fois décompressée?rmdir
s'assurerait d'abord qu'il est vide ... Mais si l'utilisateur ne connaît pas les fichiers de points, il les confondra.