Citat:
Ursprungligen postat av
.Chloe
Jag tycker det är jobbigt att hålla reda på alla kommando för att extrahera olika filer, så här är en lösning på det:
Kod:
unpack () {
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) rar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "don't know how to extract '$1'..." ;;
esac
else
echo "'$1' is not a valid file!"
fi
}
En zip-fil brukar traditionellt innehålla ett gäng filer och mappar, medan en tar-fil brukar innehålla en enda mapp som innehåller alla filerna och mapparna. Zip och tar skiljer sig på 1 mappnivå. Packar man upp en zip-fil direkt på skrivbordet får man normalt hela skrivbordet fullt, och packar man upp en tar-fil i en egen mapp får man normalt dubbla mappar (en mapp med samma namn inuti en mapp med samma namn). Båda är lika irriterande. Gzip-filer tror jag bara kan innehålla en fil, det är inte ett "container"-format som kan innehålla fler filer än en, så det kvittar.
Anyway, det är ett klassiskt exempel på internet där det inte finns en standard men borde finnas en, och så länge packningsprogrammen låter användaren packa på båda sätten, måste uppackningsprogrammen stödja båda stilarna. Man kan t.ex. högerklicka på en mapp i Windows och välja "skicka till zip-fil", och då packas själva mappen. Men man kan även markera alla, eller vissa, filer i en mapp och packa, och då skapas ingen mapp runt dem.
Det är egentligen packningsprogrammens fel, men man kan påverka som uppackare. Att bara packa upp på ett av sätten är inte snällt mot användaren, utan det bästa är att påverka försiktigt genom switchar. Om du anser att alla packningsprogram borde packa i en enda mapp, kör `dir="${1%.zip}" && mkdir "$dir" && unzip -d "$dir" "$1"` som default för *.zip, och erbjud `unzip "$1"` som alternativ.