我已经准备了一个 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) 目录之后),子目录将在那里。
此脚本将起作用。我可以使用此脚本(仅当模块是电子邮件时)来获取输出。但即使子目录存在于其他模块中,脚本也应该可以工作。也许我应该计算目录?如果有两个以上的目录(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
关于linux - 仅当 Linux bash 中存在子文件夹时,才获取带有文件名的当前目录(非完整路径),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46434506/