파일 경로 쉘 스크립트의 정규 표현식

파일 경로 쉘 스크립트의 정규 표현식

문서의 모든 클라이언트에 대한 폴더 목록이 있으므로 ~/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}".

관련 정보