获取文件数量并遍历它们

时间:2015-09-28 16:17:58

标签: bash sh

我正在尝试读取文件夹中的文件,然后对它们执行某些操作。所以我需要获取现有文件的数量然后遍历它们。我这样做是为了获得数量,但随后却失败了。

#!/bin/sh
LIMIT=expr find . -maxdepth 1 -not -type d | wc -l;
i=1;
echo $LIMIT;
while [ "$i" -lt $LIMIT ]

Throws an error: ./converting.sh: 7: [: Illegal number: 

您认为我错过了什么?任何一种转换? 在此先感谢,我不是一个bash脚本编写者,它让我疯狂!

3 个答案:

答案 0 :(得分:3)

我认为你只想要一个简单的for循环并提前休息:

LIMIT=10
for f in ./*; do
    [[ -d $f ]] && continue
    ((++i == LIMIT)) && break
    ...
done

答案 1 :(得分:2)

我可以提供不同的方法:

#!/bin/bash
FILES=/path/to/*
for f in $FILES
do
  echo "Processing $f file..."
  # take action on each file. $f store current file name
  cat "$f"
done

答案 2 :(得分:0)

这就是你的代码破解的原因:你忘了使用命令替换语法。

LIMIT=expr find . -maxdepth 1 -not -type d | wc -l;

shell调用find命令,添加值为LIMIT的变量"expr"以查找环境。退出find|wc管道后,变量LIMIT 不存在。你应该写的

LIMIT=$(find . -maxdepth 1 -not -type d | wc -l)

继续使用您的代码,当您到达此行时,您会收到错误:

while [ "$i" -lt $LIMIT ]

此处,$LIMIT被替换为空,因此shell会看到[ "$i" -lt ]。在我的系统上,/ bin / sh符号链接到bash,我得到:

$ /bin/sh
sh-4.3$ i=10
sh-4.3$ unset LIMIT
sh-4.3$ if [ "$i" -lt $LIMIT ]; then echo Y; else echo N; fi
sh: [: 10: unary operator expected
N

出现“一元运算符”错误,因为我只向[命令传递了2个参数。使用2个参数,第一个参数应该是一个运算符,第二个参数应该是它的操作数。 10不是[命令所知的运算符。