for i in `cat ${DIR}/${INDICATOR_FLIST}`
do
X=`ls $i|wc -l`
echo $X
echo $X>>txt.txt
done
我有这样的代码来检查文件是否存在于目录中,但这不起作用并给出如下错误:
not foundtage001/dev/BadFiles/RFM_DW/test_dir/sales_crdt/XYZ.txt
您可以看到未找到和文件路径之间没有空格。
I have a code like this to check if file is present in a directory or not ...
您似乎正在尝试从中读取文件列表,${DIR}/${INDICATOR_FLIST}
然后尝试确定这些文件是否确实存在。主要问题是:
ls
以确定文件是否存在。这就是您看到的那种输出的结果;stderr
和的混合stdout
。请改用test
运算符,如下所示。
以下将告诉您文件是否存在:
while read line; do
[ -e "${line}" ] && echo "${line} exists" || echo "${line} does not exist";
done < ${DIR}/${INDICATOR_FLIST}
您的文件${INDICATOR_FLIST}
具有 CRLF 行终止符(DOS 样式)。您需要去掉 CR 字符,因为 Unix 约定仅适用于 LF 行终止符。
您可以通过在行首打印“未找到”来判断这一点。前一个字符(文件名的最后一个字符)是一个 CR,它将光标返回到行首。
找到一个 dos2unix 实用程序,或者运行tr -d \\015
它(这会不加选择地删除所有 CR)。
也许您的文件位置不对。举这个例子
m:~ tr$ echo "1 2 3 4 5" > file.txt
m:~ tr$ cat file.txt
1 2 3 4 5
m:~ tr$ for i in `cat file.txt`;do echo $i ;done
1
2
3
4
5
m:~ tr$
您可以在“for”之前写入文件,并检查文件是否存在:
echo "location : ${DIR}/${INDICATOR_FLIST}"
if [ -e ${DIR}/${INDICATOR_FLIST} ];then echo "file exists ";else echo "file was not found";fi
for i in `cat ${DIR}/${INDICATOR_FLIST}`;
do
let "X=`ls $i|wc -l`";
echo $X;
echo $X>>txt.txt;
done
正确的语法是:
for i in `cat data-file`
do
echo $I
done
您正在关注的,因此问题必须在规范中$DIR
,$INDICATOR_LIST
因此请仔细检查文件的位置。