以下のコードを使用してファイルをコピーしています。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
スクリプトに 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
このコマンドは、スクリプト全体と同じになります。
for j in $(<$2/$file_z); do
echo "$1" | grep &>/dev/null "$j" && cp "$j" "$3"
done
これは移植性がありません:
grep -q
これが私がgrep &>/dev/null
代わりに使用する理由です =)