我在文档中有所有客户端的文件夹列表,因此在~/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}"
)。