انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: تابع استخراج (extract) (حل شد)  (دفعات بازدید: 744 بار)

0 کاربر و 2 مهمان درحال مشاهده موضوع.

آفلاین MADMAN

  • Hero Member
  • *
  • ارسال: 804
  • جنسیت : پسر
  • We are not users we are friends.
تابع استخراج (extract) (حل شد)
« : 02 اردیبهشت 1401، 05:40 ق‌ظ »
سلام دوستان گل
موضوع اینه که شما فایل‌هایی که از اینترنت دریافت می‌کنی هر کدوم یک فرمتی دارن (از غیب گفتم \\:D/ ](*,)) موضوع اصلی سر فایل‌های فشرده است که هر کدوم یه فرمتی دارن و هر فرمت رو باید به شکل خاصی استخراج کرد فایل اصلی رو، برای همین منظور یه تابعی هست خودمم ننوشتمش ولی بخونیدش واضحه که دقیقاً داره چی کار می‌کنه به اسم extract یعنی استخراج این کدشه:
function extract {
 if [ -z "$1" ]; then
    # display usage if no parameters given
    echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
    echo "       extract <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
 else
    for n in "$@"
    do
      if [ -f "$n" ] ; then
          case "${n%,}" in
            *.cbt|*.tar.bz2|*.tar.gz|*.tar.xz|*.tbz2|*.tgz|*.txz|*.tar)
                         tar xvf "$n"       ;;
            *.lzma)      unlzma ./"$n"      ;;
            *.bz2)       bunzip2 ./"$n"     ;;
            *.cbr|*.rar) unrar x -ad ./"$n" ;;
            *.gz)        gunzip ./"$n"      ;;
            *.cbz|*.epub|*.zip) unzip ./"$n"       ;;
            *.z)         uncompress ./"$n"  ;;
            *.7z|*.apk|*.arj|*.cab|*.cb7|*.chm|*.deb|*.dmg|*.iso|*.lzh|*.msi|*.pkg|*.rpm|*.udf|*.wim|*.xar)
                         7z x ./"$n"        ;;
            *.xz)        unxz ./"$n"        ;;
            *.exe)       cabextract ./"$n"  ;;
            *.cpio)      cpio -id < ./"$n"  ;;
            *.cba|*.ace) unace x ./"$n"      ;;
            *.zpaq)      zpaq x ./"$n"      ;;
            *.arc)       arc e ./"$n"       ;;
            *.cso)       ciso 0 ./"$n" ./"$n.iso" && \
                              extract $n.iso && \rm -f $n ;;
            *)
                              extract $n.iso && \rm -f $n ;;
            *)
                         echo "extract: '$n' - unknown archive method"
                         return 1
                         ;;
          esac
      else
          echo "'$n' - file does not exist"
          return 1
      fi
    done
fi
}

برای استفاده‌اش هم خیلی راحته اگر از بش (bash) استفاده می‌کنید کل کد رو کپی کنید و بگذارید انتهای فایل
~/.bashrcو اگر زی شل (zsh) استفاده می‌کنید باز هم کپی کنید بگذارید انتهای فایل
~/.zshrcدفعه بعدی که ترمینال باز کنید قابلیت استفاده از تابع رو دارین
حالا موضوع سر اینه اگر از فیش (fish) استفاده کنیم چی؟ آدرس فایل تنظیماتش می‌شه:
~/.config/fish/config.fish ولی یه مقدار کدش فرق می‌کنه یعنی همین کد رو کپی کنید به درد نمی‌خوره
کسی می‌تونه این اسکریپت رو به فیش تغییر بده؟
حتی قبلاً دیدم از این کد به عنوان فایل اجرایی استفاده شده اگر بشه همین کار رو هم کرد خیلی عالی می‌شه.
« آخرین ویرایش: 03 اردیبهشت 1401، 06:46 ب‌ظ توسط MADMAN »
سلامتی پنگوئن که یه ذره قد داره، اما بازم لاتی راه میره ....

آفلاین M!lad

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1757
پاسخ : تابع استخراج (extract)
« پاسخ #1 : 02 اردیبهشت 1401، 07:32 ق‌ظ »
مطمئن بشید این دایرکتوری موجود هست:

mkdir -p ~/.local/bin
این فایل رو ایجاد کنید:

~/.local/bin/extract.sh
با این محتوا:

#!/bin/bash

if [ -z "$1" ]; then
    # display usage if no parameters given
    echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
    echo "       extract <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
else
    for n in "$@"
    do
        if [ -f "$n" ] ; then
            case "${n%,}" in
                *.cbt|*.tar.bz2|*.tar.gz|*.tar.xz|*.tbz2|*.tgz|*.txz|*.tar)
                    tar xvf "$n"       ;;
                *.lzma)      unlzma ./"$n"      ;;
                *.bz2)       bunzip2 ./"$n"     ;;
                *.cbr|*.rar) unrar x -ad ./"$n" ;;
                *.gz)        gunzip ./"$n"      ;;
                *.cbz|*.epub|*.zip) unzip ./"$n"       ;;
                *.z)         uncompress ./"$n"  ;;
                *.7z|*.apk|*.arj|*.cab|*.cb7|*.chm|*.deb|*.dmg|*.iso|*.lzh|*.msi|*.pkg|*.rpm|*.udf|*.wim|*.xar)
                    7z x ./"$n"        ;;
                *.xz)        unxz ./"$n"        ;;
                *.exe)       cabextract ./"$n"  ;;
                *.cpio)      cpio -id < ./"$n"  ;;
                *.cba|*.ace) unace x ./"$n"      ;;
                *.zpaq)      zpaq x ./"$n"      ;;
                *.arc)       arc e ./"$n"       ;;
                *.cso)       ciso 0 ./"$n" ./"$n.iso" && \
                    extract $n.iso && \rm -f $n ;;
                                *)
                                    extract $n.iso && \rm -f $n ;;
                                *)
                                    echo "extract: '$n' - unknown archive method"
                                    return 1
                                    ;;
                            esac
                        else
                            echo "'$n' - file does not exist"
                            return 1
        fi
    done
fi

قابلیت اجرا بهش بدید.

chmod +x ~/.local/bin/extract.sh
الان کد شما باید به عنوان یک بش اسکریپت کوچیک توسط fish یا هر شل دیگه‌ای قابلیت اجرا داشته باشه. فقط مطمئن بشید که آدرس زیر در PATH قرار داشته باشه. یک بار logout و login کنید (اگر این آدرس از قبل موجود نباشه) باید مشکل رو برطرف کنه.

~/.local/bin/
برای اجرا می‌تونید بزنید:

extract.sh file.tar
..I feel no fault for the fault I feel..

آفلاین MADMAN

  • Hero Member
  • *
  • ارسال: 804
  • جنسیت : پسر
  • We are not users we are friends.
پاسخ : تابع استخراج (extract) (حل شد)
« پاسخ #2 : 03 اردیبهشت 1401، 06:47 ب‌ظ »
ممنونم دوست عزیز
همه چیز عالی کار می کنه
من .sh ته اسم رو پاک کردم که قشنگ‌تر باشه فقط.
سلامتی پنگوئن که یه ذره قد داره، اما بازم لاتی راه میره ....