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