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

スクリプトに 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 に答える