Recorte o nome do arquivo e o resultado da pesquisa grep do caminho

1

Eu tenho a seguinte configuração de script no momento:

#!/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

Agora, a saída da parte de eco do script é assim:

> u/umind/webvirtualmx:servingtruth.org

Eu basicamente preciso cortar a parte "webvirtualmx: servingtruth.org" do caminho, para que a parte do código que executa o comando mv mova o diretório inteiro, não apenas o arquivo.

Como eu poderia dizer para ignorar todo o caminho, e apenas pegar o caminho dos diretórios e aplicá-lo à variável $ AQUI?

I.E

mv -i -v u / umind / / u1 / OLD /

Eu tenho cerca de cem diretórios como esse, obviamente todos com nomes diferentes, mas todos seguem esse padrão:

letra / nome / webvirtualmx: nome do arquivo

outro exemplo:

l / laicc / webvirtualmx: si2tech.com

e assim por diante.

    
por Pietro Aretino 23.02.2017 / 21:54

2 respostas

1

Se $HERE tiver um nome de arquivo, acho que o mais simples seria fazer o seguinte:

mv -i -v 'dirname $HERE' /u1/OLD

Se você quer alguma segurança, então você poderia fazer:

DIR='dirname $HERE'
if test -d "$DIR"; then
  mv -i -v "$DIR" /u1/OLD
fi
    
por 23.02.2017 / 22:24
0

Grandes graças a Ed Neville. Como você pode ver abaixo, ele sugeriu passar o comando "dirname" para a variável. Aqui está o código final. O script pede uma palavra-chave, que ele usa para procurar subdiretórios (com base em onde você coloca o script). Em seguida, ele pega o caminho do diretório & desconsidera o nome do arquivo e move o diretório inteiro para onde você quiser e pergunta se você deseja continuar procurando palavras-chave e mover diretórios até responder com "n", ou seja, não.

#!/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
    
por 23.02.2017 / 23:33