簡體   English   中英

僅當Linux bash中存在子文件夾時,才使用文件名獲取當前目錄(不是完整路徑)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM