我有一个只包含.txt文件的目录。我想打印每个文件的行数。当我写cat file.txt | wc -l
时会出现行数,但是当我想制作一个脚本时,它会更复杂。我有这段代码:
for fis in `ls -R $1`
do
echo `cat $fis | wc -l`
done
我试过:wc -l $ fis,用awk,grep,它不起作用。它告诉我们:
cat:fis1:没有这样的文件或目录 0
如何打印行数?
答案 0 :(得分:1)
要在子目录中递归查找文件,请使用find
命令,而不是ls -R
,主要用于人类阅读。
find "$1" -type f -exec wc -l {} +
循环ls -R
输出的问题是:
答案 1 :(得分:0)
这里不是问题,但是echo命令不仅仅是需要的: 你可以使用
wc -l "${fis}"
出了什么问题?
你有一个名为fis1
的子目录。查看ls
:
# ls -R fis1
fis1:
file1_in_fis1.txt
解析此输出时,您的脚本将尝试
echo `cat fis1: | wc -l`
cat
会告诉您No such file or directory
和wc
点0
。
正如@Barmar解释的那样,ls
打印出你不想要的额外输出。
请勿尝试按| grep .txt
和if [ -f "${fis}"]; then ..
修补您的尝试,这些操作会因filename with spaces.txt
而失败。因此,请使用find
或shopt
(并接受@Barmar或@Cyrus的答案)。