Bash에서 적절한 검색과 유사한 검색을 구현하는 방법

Bash에서 적절한 검색과 유사한 검색을 구현하는 방법

나는 다음을 사용하는 "패키지 관리자"인 bash 스크립트를 작성 중입니다.파이 애플리케이션.
애플리케이션을 검색할 수 있도록 검색 기능을 구현하고 싶습니다. 지금 내가 하고 있는 일은 다음과 같습니다(템플릿은 나열하고 싶지 않은 폴더입니다).

#test-search.sh

PI_APPS_DIR="$HOME/pi-apps"

function list-all() {
    for dir in $PI_APPS_DIR/apps/*/; do
        dirname=$(basename "$dir")
        if [[ "$dirname" != "template" ]]; then
            echo -e "\n${bold}${inverted}${light_blue}$dirname${normal}"
            DESC="${green}$(cat "$dir"/description)${normal}"
            echo -e $DESC
        fi
    done
}

function search() {
    for dir in $PI_APPS_DIR/apps/*/; do
        dirname=$(basename "$dir")
        if [[ "$dirname" != "template" ]]; then
            echo "$dirname" | grep "$1"
        fi
    done
}


# the function is then called like this
if [[ "$1" == "search" ]]; then
    #search a app
    FIND="$(search "$2")"
    list-all | grep "$FIND"
fi

다음과 같이 실행합니다. ( ./test-search.sh search "APP"응용 프로그램은 검색어입니다.)

일어나는 일은 다음과 같습니다. 검색어가 앱 이름과 설명에 있으면 다음과 같은 결과가 나타납니다.

./test-search.sh search "Q"
QEMU
description.......

하지만 을 사용하면 q모든 앱이 나열됩니다. 검색어가 애플리케이션 설명에만 나타나는 경우 설명만 인쇄됩니다.

파일 트리는 다음과 같습니다.

~/pi-apps/apps예를 들어, apps각 애플리케이션에는 application name이라는 폴더가 있습니다. 나열하고 싶지 않은 폴더가 Zoom1개 있습니다 .template

다음은 다른 사람이 Python으로 작성한 동일한 프로젝트입니다.https://github.com/techcoder20/PiAppsTerminalAdvanced/blob/main/PiAppsTerminalAdvanced.py내가 하고 싶은 일을 이해하는 데 도움이 될 것 같아요.

답변1

이것이 답변으로 받아 들여지기를 바랍니다.

당신의 알고리즘~해야 한다예:

  1. 이름에 검색 문자열이 포함된 디렉터리를 찾습니다. 발견되면 디렉토리 이름과 cat해당 설명을 인쇄하십시오.

예를 들어:

for dir in *${SEARCHSTRING}*
do
  echo $dir
  cat "$dir/description"
done
  1. 다른 모든 디렉토리에서 다음을 찾으십시오.설명하다검색 문자열을 포함합니다. 발견되면 위를 참조하세요.

예를 들어:

for dir in *
do
  if [[ $dir != *${SEARCHSTRING}* ]]
  then 
    if grep -q "$SEARCHSTRING"
    then 
      echo $dir
      cat "$dir/$SEARCHSTRING"
    fi
  fi
done

두 개의 루프를 하나로 쉽게 결합할 수 있습니다. 참고: 나는 단지 그것들을 함께 던졌을 뿐, 테스트하거나 기존 프로그램에 적용하지 않았습니다.

당신의 알고리즘은 무엇입니까실제로하다:

  1. 검색 문자열이 포함된 디렉터리를 찾습니다. 그 다음에cat 모두결과가 비어 있는 경우에도 이 검색 결과를 설명하고 파악합니다. 적어도 두 가지 바람직하지 않은 결과가 있습니다. 존재하지 않는 디렉토리를 검색하면 모든 내용이 인쇄됩니다. 또한 검색 문자열이 포함된 설명 줄만 인쇄됩니다.
  2. 설명(디렉토리가 아닌)에 검색 문자열이 포함된 경우를 다루지 않았습니다.

한두 줄을 변경해도 이 문제는 해결되지 않습니다. 재설계가 필요하다고 생각합니다.

관련 정보