احتمالاً برای شما نیز پیش آمده است که بخواهید 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