現在、次のスクリプト設定があります。
#!/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