5
#!/bin/bash
outbound=/home/user/outbound/
putfile=DATA_FILE_PUT_*.CSV
cd $outbound
filecnt=0
for file in $putfile; do let filecnt=filecnt+1; done
echo "Filecount: " $filecnt

したがって、このコードは、送信ディレクトリにファイルがある場合にうまく機能します。ファイルをアウトバウンド パスに配置できます。ファイルが putfile マスクと一致する限り、ファイルは期待どおりにインクリメントされます。

にファイルがないときにこれを実行すると、問題が発生します$outbound。ファイルがゼロの場合$filecntでも a が返されますが、ファイルがない場合は a1が返されるようにしたいと考えて0います。

簡単なものがありませんか?

4

4 に答える 4

2

最初にファイルが存在するかどうかをテストできます

for file in $putfile; do
  if [ -f "$file" ] ; then
    let filecnt=filecnt+1
  fi
done

または、find でファイルを探します

for file in $(find . -type f -name="$putfile"); do
  let filecnt=filecnt+1
done

または単に(固定)

filecnt=$(find . -type f -name "$putfile" | wc -l); echo $filecnt
于 2013-10-07T19:50:39.387 に答える
1

これは、一致するものが見つからない場合、デフォルトで bash がワイルドカードDATA_FILE_PUT_*.CSVを単語に展開するDATA_FILE_PUT_*.CSVため、カウントが 1 になるためです。この動作を無効にするには、shopt -s nullglobを使用します。

于 2013-10-07T19:50:44.263 に答える