web-dev-qa-db-fra.com

Décompressez dans un dossier du même nom

Comment décompresser un fichier (ex: foo.Zip) vers un dossier du même nom (foo/)?

Fondamentalement, je veux créer un alias de décompression qui décompresse les fichiers dans un dossier du même nom (au lieu du dossier actuel). C'est ainsi que l'utilitaire de décompression de Mac fonctionne et je veux faire de même en CLI.

9
Emanuil Rusev

J'utilise unar pour cela; par défaut, si une archive contient plusieurs fichiers ou répertoires de niveau supérieur, elle crée un répertoire pour stocker le contenu extrait, nommé d'après l'archive de la manière que vous décrivez:

unar foo.Zip

Vous pouvez forcer la création d'un répertoire dans tous les cas avec le -d option:

unar -d foo.Zip

Alternativement, une fonction peut le faire avec unzip:

unzd() {
    if [[ $# != 1 ]]; then echo I need a single argument, the name of the archive to extract; return 1; fi
    target="${1%.Zip}"
    unzip "$1" -d "${target##*/}"
}

Le

target=${1%.Zip}

la ligne supprime le .Zip extension, sans égard pour rien d'autre (donc foo.Zip devient foo et ~/foo.Zip devient ~/foo). le

${target##*/}

l'expansion supprime tout jusqu'à la dernière /, donc ~/foo devient foo. Cela signifie que la fonction extrait tout .Zip fichier dans un répertoire qui porte son nom, dans le répertoire courant. Utilisation unzip $1 -d "${target}" si vous souhaitez plutôt extraire l'archive dans un répertoire à côté.

11
Stephen Kitt

Utilisez décompressez -d exdir zipfile.Zip pour extraire un fichier zip dans un répertoire particulier. En principe, en lisant votre message littéralement, vous pouvez écrire une fonction comme celle-ci:

unzip_d () {
    unzip -d "$1" "$1"
}

Comme vous voulez que l'extension . Zip soit supprimée, vous pouvez utiliser une syntaxe de variable spéciale pour le faire:

unzip_d () {
    zipfile="$1"
    zipdir=${1%.Zip}
    unzip -d "$zipdir" "$zipfile"
}
8
Silas Coker