パスからファイル名と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

関連情報