Bash“移动文件”错误消息

Bash“移动文件”错误消息

我正在尝试使用 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:我已经寻找答案很长时间了,但却毫无进展。

答案1

编写脚本时,如果出现错误,您需要使用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

答案2

您需要将命令周围的引号更改grep反引号

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

或者采用新风格$()

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

来源:$(stuff) 和 `stuff` 有什么区别?

相关内容