정규식을 사용하여 특정 디렉토리에 특정 단어로 시작하는 폴더가 있는지 확인하십시오.

정규식을 사용하여 특정 디렉토리에 특정 단어로 시작하는 폴더가 있는지 확인하십시오.

특정 단어로 시작하는 하위 디렉터리에 대해 특정 디렉터리를 확인하는 스크립트를 작성 중입니다.

지금까지 내 스크립트는 다음과 같습니다.

#!/bin/bash

function checkDirectory() {
    themeDirectory="/usr/share/themes"
    iconDirectory="/usr/share/icons"
    # I don't know what to put for the regex. 
    regex=

    if [ -d "$themeDirectory/$regex" && -d "$iconDirectory/$regex" ]; then
       echo "Directories exist."
    else
       echo "Directories don't exist."
    fi
}

regex그렇다면 특정 디렉토리에 특정 단어로 시작하는 폴더가 있는지 확인하려면 어떻게 해야 할까요 ?

답변1

-d정규 표현식을 허용하지 않고 파일 이름을 허용합니다. 간단한 접두사만 확인하려면 와일드카드로 충분합니다.

exists=0
shopt -s nullglob
for file in "$themeDirectory"/word* "$iconDirectory"/* ; do
    if [[ -d $file ]] ; then
        exists=1
        break
    fi
done
if ((exists)) ; then
    echo Directory exists.
else
    echo "Directories don't exist."
fi

nullglob일치하는 항목이 없으면 와일드카드를 빈 목록으로 확장합니다. 더 큰 스크립트에서는 하위 쉘의 값을 변경하거나 필요하지 않은 경우 이전 값을 다시 설정하십시오.

답변2

주어진 패턴/접두사와 일치하는 디렉토리만 찾으려면 다음을 사용할 수 있다고 생각합니다 find.

find /target/directory -type d -name "prefix*"

또는 당신이 원한다면즉각적인하위 디렉터리:

find /target/directory -maxdepth 1 -type d -name "prefix*"

물론 -regex실제 정규식 일치가 필요한 경우도 있습니다. (주의: -maxlength가 gnu-ism인지 기억이 나지 않습니다.)

(업데이트) 맞습니다. if 문을 원하셨습니다. Find는 항상 0을 반환하므로 반환 값을 사용하여 찾은 항목이 있는지 확인할 수 없습니다(grep과 달리). 그러나 예를 들어 줄 수를 셀 수 있습니다. 출력을 파이프하여 wc개수를 얻은 다음 0이 아닌지 확인합니다.

if [ $(find /target/directory -type d -name "prefix*" | wc -l ) != "0" ] ; then
    echo something was found
else
    echo nope, didn't find anything
fi

답변3

변수 이름은 regex잘 선택되지 않지만 값을 "$1"like 로 설정하는 것이 좋습니다 regex="$1". 다음 단계는 if명령문을 다음과 같이 변경하는 것입니다.

if [ -d "$themeDirectory/$regex" && -d "$iconDirectory/$regex" ]; then

에게

if [ -d "$themeDirectory/$regex" ] && [ -d "$iconDirectory/$regex" ]; then

스크립트는 다음과 같습니다.

function checkDirectory() {
    themeDirectory="/usr/share/themes"
    iconDirectory="/usr/share/icons"
    # I don't know what to put for the regex. 
    regex="$1"

    if [ -d "$themeDirectory/$regex" ] && [ -d "$iconDirectory/$regex" ]; then
       echo "Directories exist."
    else
       echo "Directories don't exist."
    fi
}

셸에서 다음을 통해 스크립트를 소싱할 수 있습니다.

. /path/to/script

이제 함수를 사용할 준비가 되었습니다.

checkDirectory test
Directories don't exist.

관련 정보