0

我正在使用下面的代码来复制文件。我在 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
4

2 回答 2

2

您的脚本中有两个错误:

  • 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

该命令与您的整个脚本相同。

于 2012-06-28T21:56:03.233 回答
1
for j in $(<$2/$file_z); do
    echo "$1" | grep &>/dev/null "$j" && cp "$j" "$3"
done

这不是便携式的:

grep -q

这就是为什么我grep &>/dev/null改用 =)

于 2012-06-28T22:01:42.353 回答