繁体   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