정규 표현식을 사용하여 특정 디렉터리에 특정 단어로 시작하는 폴더가 있는지 확인하세요.

정규 표현식을 사용하여 특정 디렉터리에 특정 단어로 시작하는 폴더가 있는지 확인하세요.

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

이것은 지금까지 내 스크립트입니다.

#!/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"와 같이 값을 설정하는 것을 고려해 보세요 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.

관련 정보