Bash & ldquo; переместить файлы & rdquo; сообщение об ошибке

Я пытаюсь переместить некоторые файлы на основе шаблона поиска, используя bash, но получаю сообщение об ошибке. Вот формат заимствованного сценария, который я использовал, и сообщение об ошибке. Спасибо!

#!/bin/bash

firstdir=dir1
seconddir=dir2


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

Сообщение об ошибке:

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

PS Я довольно долго искал ответ, но ничего не получил.

0
задан 27 March 2015 в 14:10

2 ответа

При записи сценариев, если у Вас есть ошибка, Вам нужно к echo Ваши переменные для понимания то, что происходит. Это - первый шаг в отладке. Если бы Вы сделали так, Вы видели бы, что эти grep команда не выполняется и вместо этого сохраняется как $i:

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

для передачи результатов команды, необходимо использовать замена команды . Это или `command` или, лучше, $(command). Так, что Вы хотели сделать, был:

for i in $(grep -l matchpattern "$firstdir"/*); do 
    mv "$i" "$seconddir"
done
3
ответ дан 27 March 2015 в 14:10

Необходимо изменить кавычки вокруг эти grep команда для обратные галочки :

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

Или принимают новый стиль $():

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

Источник: , Каково различие между $ (материал) и 'материалом'?

3
ответ дан 27 March 2015 в 14:10

Другие вопросы по тегам:

Похожие вопросы: