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
您可以看到未找到和文件路径之间没有空格。
答案 0 :(得分: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}
答案 1 :(得分:1)
您的文件${INDICATOR_FLIST}
具有CRLF行终止符(DOS样式)。你需要删除CR字符,因为Unix惯例是针对仅LF的行终止符。
您可以通过在行首开始打印“未找到”的方式来说明这一点。紧接在前的字符(文件名的最后一个字符)是CR,它将光标发送回行的开头。
查找dos2unix实用程序,或对其运行tr -d \\015
(这会不加选择地删除所有CR)。
答案 2 :(得分: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
答案 3 :(得分:0)
正确的语法是:
for i in `cat data-file`
do
echo $I
done
您正在关注,因此问题必须在$DIR
和$INDICATOR_LIST
的规范中,因此请仔细检查文件的位置。