我正在尝试使用 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