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.
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é.
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"
}