从路径中剪切文件名和 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

现在脚本的 echo 部分的输出如下所示:

> u/umind/webvirtualmx:servingtruth.org

我基本上需要从路径中删除“webvirtualmx:servingtruth.org”部分,以便运行 mv 命令的代码部分移动整个目录,而不仅仅是文件。

我将如何告诉忽略整个路径,只获取目录路径并将其应用到变量 $HERE?

IE

MV-i-v你/umind//u1/旧/

我有大约一百个这样的目录,显然所有的名称都不同,但它们都遵循以下模式:

字母/名称/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

相关内容