انجمنهای فارسی اوبونتو
کمک و پشتیبانی => راهنماها، نکات و ترفندها => نویسنده: 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
ولی یه مقدار کدش فرق میکنه یعنی همین کد رو کپی کنید به درد نمیخوره
کسی میتونه این اسکریپت رو به فیش تغییر بده؟
حتی قبلاً دیدم از این کد به عنوان فایل اجرایی استفاده شده اگر بشه همین کار رو هم کرد خیلی عالی میشه.
-
مطمئن بشید این دایرکتوری موجود هست:
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
-
ممنونم دوست عزیز
همه چیز عالی کار می کنه
من .sh ته اسم رو پاک کردم که قشنگتر باشه فقط.