#!/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掩码匹配,文件就会按预期递增。bash:变量中带有通配符的文件名
问题出在哪里,如果我在没有文件位于$outbound
的情况下运行这个。 如果有零个文件那么$filecnt
仍然会返回一个1
但我希望它返回0
如果没有文件那里。
我是否缺少一些简单的东西?
请注意,如果存在包含换行符(通常不会发生,但可能是健壮性或安全问题)的文件名,则此功能无效。 – Gilles
@Gilles感谢您的反馈。同意你'ls'可能导致这样的问题。那么我宁愿'find'然后''wc'。我相信'find'足够强大。纠正我,如果我错了 – jkshah
这是同样的问题:'find'是健壮的,但然后'wc -l'仍然会计数行而不是文件名。你可以使用'find ... -print0 | tr -dc'\ 0'| wc -c',但在bash内部进行计数更容易。从'find'开始计数将会遍历子目录(如果有的话),这不在原始需求中。 – Gilles