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

کمک و پشتیبانی => راهنماها، نکات و ترفندها => نویسنده: MADMAN در 02 اردیبهشت 1401، 05:40 ق‌ظ

عنوان: تابع استخراج (extract) (حل شد)
ارسال شده توسط: MADMAN در 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 ولی یه مقدار کدش فرق می‌کنه یعنی همین کد رو کپی کنید به درد نمی‌خوره
کسی می‌تونه این اسکریپت رو به فیش تغییر بده؟
حتی قبلاً دیدم از این کد به عنوان فایل اجرایی استفاده شده اگر بشه همین کار رو هم کرد خیلی عالی می‌شه.
عنوان: پاسخ : تابع استخراج (extract)
ارسال شده توسط: M!lad در 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
عنوان: پاسخ : تابع استخراج (extract) (حل شد)
ارسال شده توسط: MADMAN در 03 اردیبهشت 1401، 06:47 ب‌ظ
ممنونم دوست عزیز
همه چیز عالی کار می کنه
من .sh ته اسم رو پاک کردم که قشنگ‌تر باشه فقط.