我目前有以下脚本设置:
#!/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