文件路径shell脚本中的正则表达式

文件路径shell脚本中的正则表达式

我在文档中有所有客户端的文件夹列表,因此在~/Documents/clients/文件夹中,文件夹显示如下:

Angelina_Julie-client23456
Brad_Pitt-client34567
Tom_Hanks-client12345

等等。然后我有以下脚本:

clientcode="client12345"
cdate=$(date +%F)
mydir="/home/userA/Documents/clients/$clientcode"_"$cdate/"

问题是"/home/userA/Documents/$clientcode"_"$cdate/"找不到此路径,因为在客户端代码之前有客户端firstname_lastname-,因此在本例中添加了正确的 mydir,/home/userA/Documents/Tom_Hanks-$clientcode"_"$cdate/如您所见,Tom_Hanks-已添加。所以我想知道如何让它自动获取并包含 Firstname_Lastname- 取决于$clientcode它在文件夹中是唯一的~/Documents/clients/,并将其添加到mydir

答案1

使用查找:

clientcode="client12345"
cdate=$(date +%F)
mydir="$(find /home/userA/Documents/clients/ -name "*${clientcode}*" -type d)_$cdate"

这将找到名称包含的目录clientcode并将其附加_$cdate到其末尾。

注意:这实际上不会更改目录名称。存在的目录名称似乎mydir并不实际存在。

答案2

给定这些目录,.../clients/*-"$clientcode"/将扩展到匹配的目录名称。请注意,星号不带引号。 (但这不是正则表达式,而是全局模式。)

但是您不能在扩展中使用模式,因此您需要解决它,例如使用循环:

mydir=
for d in ./clients/*-"$clientcode"/; do
    if [ "$mydir" ]; then
        echo "More than one matching directory!" >&2
    fi
    mydir=$d
done
if [ -z "$mydir" ]; then
    echo "No match!" >&2
fi

我不确定日期是否应该是要匹配的文件名的一部分(因此./clients/*-"$clientcode"_*/),或者您是否要附加它并创建一个新文件(newdir="${mydir}_${date}")。

相关内容