경로에서 파일 이름 및 grep 검색 결과 잘라내기

경로에서 파일 이름 및 grep 검색 결과 잘라내기

현재 다음과 같은 스크립트 설정이 있습니다.

#!/bin/bash
while true;
 do
  echo "Type in keyword & press enter..."
  read KEYWORD
  HERE=$(grep -i "$KEYWORD" */*/webvirtualmx)
  echo $HERE
  ANSWER2="y";read -p "Do you want to move to old? y or n?" ANSWER2;
  if [ "$ANSWER2" = "y" ]
  then mv -i -v $HERE /u1/OLD
  fi
  ANSWER="n";read -p "Do you have more keywords? y or n?" ANSWER;
    if [ "$ANSWER" = "n" ]
    then break
    fi
 done

이제 스크립트의 에코 부분 출력은 다음과 같습니다.

> u/umind/webvirtualmx:servingtruth.org

기본적으로 mv 명령을 실행하는 코드 부분이 파일뿐만 아니라 전체 디렉터리를 이동할 수 있도록 경로에서 "webvirtualmx:servingtruth.org" 부분을 제거해야 합니다.

전체 경로를 무시하고 디렉토리 경로를 가져와 $HERE 변수에 적용하려면 어떻게 해야 합니까?

MV-iv너/마음//u1/이전/

나는 이와 같은 디렉토리를 약 100개 가지고 있는데, 모두 다른 이름을 가지고 있지만 모두 다음 패턴을 따릅니다.

문자/이름/webvirtualmx:파일 이름

다른 예시:

l/laicc/webvirtualmx:si2tech.com

기타 등등

답변1

파일 이름을 저장하는 경우 $HERE가장 쉬운 방법은 다음을 수행하는 것입니다.

mv -i -v `dirname $HERE` /u1/OLD

보안을 원할 경우 다음을 수행할 수 있습니다.

DIR=`dirname $HERE`
if test -d "$DIR"; then
  mv -i -v "$DIR" /u1/OLD
fi

답변2

에드 네빌에게 깊은 감사를 드립니다. 아래와 같이 그는 "dirname" 명령을 변수에 전달할 것을 권장합니다. 이것이 최종 코드입니다. 스크립트에는 하위 디렉터리(스크립트를 배치한 위치에 따라)를 grep하기 위한 키워드가 필요합니다. 그런 다음 디렉터리 경로를 사용하고 파일 이름을 무시하고 전체 디렉터리를 원하는 곳으로 이동한 다음 "n"("아니요")이라고 대답할 때까지 키워드 검색을 계속하고 디렉터리를 이동할 것인지 묻습니다.

#!/bin/bash
while true;
 do
  echo "Type in keyword & press enter..."
  read KEYWORD
  HERE=$(grep -i "$KEYWORD" */*/webvirtualmx)
  echo $HERE
  DIR=$(dirname "$HERE")
  ANSWER2="y";read -p "Do you want to move to old? y or n?" ANSWER2;
  if [ "$ANSWER2" = "y" ] && test -d "$DIR";
  #then mv -i -v $DIR /u1/OLD
  fi
  ANSWER="n";read -p "Do you have more keywords? y or n?" ANSWER;
    if [ "$ANSWER" = "n" ]
    then break
    fi
 done

관련 정보