احتمالاً برای شما نیز پیش آمده است که بخواهید basename فایل را با استفاده از bash در لینوکس استخراج نمایید. در لینوکس با استفاده از دستورات داخلی یا دستورات خارجی پوسته bash میتوان نام فایل و پسوند را استخراج کرد. در این مقاله، روشهای مختلفی به منظور دریافت basename نام فایل برای مسیر داده شده (از طریق bash) شرح داده شده است.
این مطلب نیز ممکن است برای شما مفید باشد: نوشتن در فایل با استفاده از Bash
به منظور استخراج نام و پسوند فایل در Bash میتوانید از یکی از روشهای زیر استفاده کنید:
- basename /path/to/file.tar.gz .gz
- ${VAR%pattern}
- ${VAR # pattern}
در ادامه، چندین نمونه شرح داده شده است.
دریافت نام فایل و پسوند با Bash
به منظور دریافت تنها نام فایل از یک مسیر مشخص کافیست، از دستور زیر استفاده نمایید:
FILE="/home/hosni/lighttpd.tar.gz"
basename "$FILE"
f="$(basename -- $FILE)"
echo "$f"
دریافت نام فایل بدون استفاده از دستور basename
در صورتی که نمیخواهید از دستور basename برای دریافت نام فایل استفاده کنید، ساختار دستور مورد نیاز شما به صورت زیر خواهد بود:
FILE="/home/hosni/lighttpd.tar.gz"
echo ${FILE##*/}
## another example ##
url="https://jeyserver.com/fa/blog"
echo "${url##*/}"
دریافت نام اسکریپت در حال اجرا با استفاده از پارامتر bash
$0 مسیر کاملی را برای اسکریپت در حال اجرا ارائه میکند. به منظور استخراج این نام کافیست دستور زیر را اجرا نمایید:
#!/bin/bash
_self="${0##*/}"
echo "$_self is called"
## or in usage() ##
usage(){
echo "$_self: arg1 arg2"
}
دریافت پسوند یک فایل با استفاده از Bash
نمونههایی از استخراج پسوند یک فایل با استفاده از bash به شرح زیر است:
FILE="/home/hosni/lighttpd.tar.gz"
echo "${FILE#*.}" # print tar.gz
echo "${FILE##*.}" # print gz
ext="${FILE#*.}" # store output in a shell variable
echo "$FILE has $ext" # display it
دریافت basename از مسیر کامل نام فایل در bash
به منظور دریافت basename نام فایل میتوانید از هر یک از دستورات زیر استفاده کنید:
file="/home/hosni/.gpass/passwd.enc"
basename $file
echo ${file##*/}
زمانی که بدانید پسوند فایل، enc. است، میتوانید به صورت زیر تنها قسمت اول file$ را دریافت نمایید:
file="/home/hosni/.gpass/passwd.enc"
basename $file .enc
## without using basename ##
t="${t%.enc"}
t="${t%.enc}"
echo "$t"
یک نمونه مثال اسکریپت به منظور استخراج نام فایل و پسوند در Bash به صورت زیر است:
#!/bin/bash
# Purpose: Compile latest Linux kernel
# Author: Vivek Gite {https://www.cyberciti.biz/}
# TranslateBy: JeyServer (https://jeyserver.com)
# License: GPL version 2.0 or above
# ----------------------------------------------------------------
set -e
_out="/tmp/out.$$"
dldir=~/linux
isdl=1 # do not download
current="$(uname -r)"
curl -s https://www.kernel.org/ > "$_out"
url="$(grep -A 2 '<td id="latest_button">' ${_out} | grep -Eo '(http|https)://[^/"]+.*xz')"
gpgurl="${url/tar.xz/tar.sign}"
file="${url##*/}"
remote="${file%.tar.xz}"
remote="${remote#linux-}"
echo "* Current Linux kernel: $current"
echo "* Remote Linux kernel version: $remote"
[ "$current" = "$remote" ] || isdl=0
if [ $isdl = 0 ]
then
notify-send "A new kernel version ($remote) has been released."
echo "* Downloading new kernel ..."
wget -qc "$url" -O "${dldir}/${file}"
wget -qc "$gpgurl" -O "${dldir}/${gpgurl##*/}"
echo "* Using gpg to verify new tar ball ..."
cd "$dldir"
xz -fd "$file"
gpg --verify "${gpgurl##*/}"
if [ $? -eq 0 ]
then
notify-send "Now compiling kernel ver $remote..."
tar xf "${file%.xz}"
cd "${file%.tar.xz}"
cp -v "/boot/config-$(uname -r)" .config
make -j $(nproc) && /usr/bin/notify-send "Password needed to install new kernel..." && sudo make modules_install && sudo make install && sudo reboot
fi
fi
منبع:
cyberciti
0 دیدگاه
نوشتن دیدگاه