-1
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

您可以看到未找到和文件路径之间没有空格。

4

4 回答 4

2
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}
于 2013-08-20T07:54:30.040 回答
1

您的文件${INDICATOR_FLIST}具有 CRLF 行终止符(DOS 样式)。您需要去掉 CR 字符,因为 Unix 约定仅适用于 LF 行终止符。

您可以通过在行首打印“未找到”来判断这一点。前一个字符(文件名的最后一个字符)是一个 CR,它将光标返回到行首。

找到一个 dos2unix 实用程序,或者运行tr -d \\015它(这会不加选择地删除所有 CR)。

于 2013-08-20T10:34:39.743 回答
0

也许您的文件位置不对。举这个例子

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
于 2013-08-20T07:49:07.057 回答
0

正确的语法是:

for i in `cat data-file`
do
    echo $I
done

您正在关注的,因此问题必须在规范中$DIR$INDICATOR_LIST因此请仔细检查文件的位置。

于 2013-08-20T07:50:06.787 回答