[英]Get current directory (not full path) with filename only when sub folder is present in Linux bash
我准備了一個bash腳本,僅獲取具有文件名的目錄(不是完整路徑),其中存在文件。 僅當文件位於子目錄中時才需要這樣做。
例如:如果輸入為src/email/${sub_dir}/Bank_Casefeed.email
,則輸出應為${sub_dir}/Bank_Casefeed.email
。
如果輸入為src/layouts/Bank_Casefeed.layout
,則輸出應為Bank_Casefeed.layout
。 我可以使用basename
命令輕松獲得它。
src / basefolder始終是常數。 在某些情況下(在src / email(basefolder)目錄之后),sub_directories將存在。
該腳本將起作用。 我可以使用此腳本(僅當模塊為電子郵件時)才能獲取輸出。 但是即使其他模塊中存在子目錄,腳本也應該可以工作。 也許我應該算一下目錄嗎? 如果有兩個以上的目錄(src / basefolder),則腳本應獲取子目錄。 有沒有更好的方法來處理這兩種情況?
#!/bin/bash
filename=`basename src/email/${sub_dir}/Bank_Casefeed.email`
echo "filename is $filename"
fulldir=`dirname src/email/${sub_dir}/Bank_Casefeed.email`
dir=`basename $fulldir`
echo "subdirectory name: $dir"
echo "concatenate $filename $dir"
Entity=$dir/$filename
echo $Entity
使用shell參數擴展:
sub_dir='test'
files=( "src/email/${sub_dir}/Bank_Casefeed.email" "src/email/Bank_Casefeed.email" )
for f in "${files[@]}"; do
if [[ $f == *"/$sub_dir/"* ]]; then
echo "${f/*\/$sub_dir\//$sub_dir\/}"
else
basename "$f"
fi
done
test/Bank_Casefeed.email
Bank_Casefeed.email
我知道可能會有更簡單的方法來做到這一點。 但我相信您可以操縱輸入字符串。 例如:
#!/bin/bash
sub_dir='test'
DIRNAME1="src/email/${sub_dir}/Bank_Casefeed.email"
DIRNAME2="src/email/Bank_Casefeed.email"
echo $DIRNAME1 | cut -f3- -d'/'
echo $DIRNAME2 | cut -f3- -d'/'
這將刪除前兩個目錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.