Advertisement
esuvii

extract.sh

Mar 14th, 2025
430
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 1.56 KB | None | 0 0
  1. #!/bin/zsh
  2.  
  3. helpFunction()
  4. {
  5.     echo ""
  6.     echo "Usage: $0 archive.ext destination"
  7.     echo "Extract an archive based on its extension."
  8.     echo "\$1 required: archive to extract"
  9.     echo "\$2 optional: directory to extract to"
  10.     echo "By default extracts to the same name as \$1"
  11.     exit 1
  12. }
  13.  
  14. if [ $# -eq 0 ] || [ $# -gt 2 ]; then
  15.         helpFunction
  16. fi
  17.  
  18. # parse path/fileName.extension
  19. fileName=$(basename -- "$1")
  20. if [[ "$fileName" =~ \.tar\..* ]]; then
  21.     extension="tar.${fileName##*.}"
  22. else
  23.     extension="${fileName##*.}"
  24. fi
  25. extension=$(echo "$extension" | tr '[:upper:]' '[:lower:]')
  26. fileName="${fileName%.*}"
  27.  
  28. # destination is $2 or simply the fileName
  29. directory=$fileName
  30. if [ -n "$2" ]; then
  31.     directory=$2
  32. fi
  33.  
  34. # make directory if it doesnt exist
  35. if [ ! -d "$directory" ] && [ ! -L "$directory" ]; then
  36.     mkdir -p "$directory"
  37. fi
  38.  
  39. # extract based on extension
  40. case "$extension" in
  41.     tar.gz)     tar -xzvf "$1" -C "$directory" ;;
  42.     tar.bz2)    tar -xjvf "$1" -C "$directory" ;;
  43.     tar.xz)     tar -xJvf "$1" -C "$directory" ;;
  44.     tar)        tar -xvf "$1" -C "$directory" ;;
  45.     zip)        unzip -d "$directory" "$1" ;;
  46.     7z)         7z x "$1" -o"$directory" ;;
  47.     gz)         gunzip -c "$1" > $directory ;;
  48.     rar)        unrar x "$1" "$directory" ;;
  49.     iso)        echo "Cannot extract ISO files, use a tool like mount."
  50.                 exit 1 ;;
  51.     *)          echo "Unsupported file extension: $extension"
  52.                 exit 1 ;;
  53. esac
  54.  
  55. echo "Extraction completed successfully to $directory."
  56.  
  57. exit 0
  58.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement