仅当Linux文件夹中存在子文件夹时才获取当前目录(非完整路径)
问题描述:
我准备了一个bash脚本来获取文件名所在的目录(不是完整路径)。只有当文件位于子目录中时才能完成。仅当Linux文件夹中存在子文件夹时才获取当前目录(非完整路径)
例如: 如果输入为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
答
我知道可能有更简单的方法来做到这一点。但我相信你可以操纵输入字符串。例如:
#!/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'/'
这将删除前两个目录。
答
使用壳参数扩展:
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
由于格伦。 sub_dir可以是任何东西。文件是在运行时由另一个脚本创建的。因此在此脚本中不能设置sub_dir名称。只是文本文件中的文件列表。有办法处理吗? – Ela
我不明白这个评论如何适合你的问题。这有助于:http://mywiki.wooledge.org/BashFAQ/001 –