ファイルパスシェルスクリプトの正規表現

ファイルパスシェルスクリプトの正規表現

ドキュメント内のすべてのクライアントのフォルダ一覧があるため、~/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が追加されます。だから私はFirstname_Lastnameを自動的にインポートして含める方法が気になります。フォルダ内で一意かどうかに応じて?/home/userA/Documents/Tom_Hanks-$clientcode"_"$cdate/Tom_Hanks-$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"_*/日付が一致するファイル名の一部である必要があるか(so)、日付を追加して新しいファイルを作成するか()はわかりませんnewdir="${mydir}_${date}"

関連情報