현재 다음과 같은 스크립트 설정이 있습니다.
#!/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