我正在使用下面的代码来复制文件。我在 if 语句中遇到错误..请帮助... $1 是一个数字,将在 $j 这是一个文件中搜索...如果有一些记录,我想复制该文件,否则什么都不会做.. .
for j in $2/$file_z
do
if ``grep $1 $j | wc -l` -gt 0`
then
echo $j
cp $j $3
fi
done
我正在使用下面的代码来复制文件。我在 if 语句中遇到错误..请帮助... $1 是一个数字,将在 $j 这是一个文件中搜索...如果有一些记录,我想复制该文件,否则什么都不会做.. .
for j in $2/$file_z
do
if ``grep $1 $j | wc -l` -gt 0`
then
echo $j
cp $j $3
fi
done
您的脚本中有两个错误:
backticks
不允许嵌套。$2/$file_z
代替$(<$2/$file_z)
固定的:
for j in `<$2/$file_z`
do
if grep -q "$1" "$j" > /dev/null
# if grep "$1" "$j" > /dev/null # if your grep does not support -q
then
echo $j
cp $j $3
fi
done
更优化:
for j in `<$2/$file_z`
do
grep -l "$1" "$j" /dev/null && cp $j $3
done
grep
本身可以打印文件名。
你也可以不用for
:
cp -v $(grep -l "$1" `<$2/$file_z`) $3
该命令与您的整个脚本相同。
for j in $(<$2/$file_z); do
echo "$1" | grep &>/dev/null "$j" && cp "$j" "$3"
done
这不是便携式的:
grep -q
这就是为什么我grep &>/dev/null
改用 =)