Mensagem de erro "mover arquivos"

0

Estou tentando mover alguns arquivos com base em um padrão de pesquisa usando o bash, mas recebo uma mensagem de erro. Aqui está o formato de script emprestado que usei e a mensagem de erro. Obrigado!

#!/bin/bash

firstdir=dir1
seconddir=dir2


for i in 'grep -l matchpattern $firstdir/*'; do
    mv $i $seconddir
    echo $i
done

mensagem de erro:

mv: invalid option -- 'l'
Try 'mv --help' for more information.
grep -l problem $firstdir/*

PS Eu tenho procurado por algum tempo para uma resposta, mas chegar a lugar nenhum.

    
por David 27.03.2015 / 12:07

2 respostas

3

Ao escrever scripts, se você tiver um erro, precisará echo de suas variáveis para entender o que está acontecendo. Este é o primeiro passo na depuração. Se você tivesse feito isso, você teria visto que o comando grep não está sendo executado e, em vez disso, está sendo salvo como $i :

$ for i in 'grep -l matchpattern $firstdir/*'; do 
    echo "i is: $i"; 
  done
i is: grep -l matchpattern $firstdir/*

Para passar os resultados de um comando, você precisa usar substituição de comando . Isso é 'command' ou, melhor, $(command) . Então, o que você queria fazer era:

for i in $(grep -l matchpattern "$firstdir"/*); do 
    mv "$i" "$seconddir"
done
    
por terdon 27.03.2015 / 12:15
3

Você precisa alterar as aspas em torno do comando grep para backticks :

for i in 'grep -l matchpattern "$firstdir"/*'; do

Ou adote o novo estilo $() :

for i in $(grep -l matchpattern "$firstdir"/*); do 

Fonte: Qual é a diferença entre $ (stuff) e 'stuff'?

    
por Sylvain Pineau 27.03.2015 / 12:12