使用bash脚本迭代目录中的文件

时间:2014-02-22 12:44:56

标签: bash

我想迭代给定目录中的文件。我尝试使用相同的for循环......但我在这个循环中有另一个循环,我需要读取多个文件,直到条件在该循环内为真,一次上传...但是内部循环我是因为文件迭代器循环在内部循环之外,所以只能访问一个文件。 有没有像file.getNext这样的东西,所以我可以访问循环内的文件数而不使用索引/循环。

我需要这样的东西:

while [ count -le $uploadRate ]
do
   files="$files,directory.getNextFile"
   $(curl -o $log_Path -T "{$files}" url)
done

其中$files一次会上传多少个文件 我不想将文件加载到数组中,因为目录有大量文件,所以数组不可行,所以想迭代目录,如getNext文件。

2 个答案:

答案 0 :(得分:1)

将文件名放在一个数组中,并以5组为单位进行迭代:

files=(/path/to/dir/*)
nfiles=${#files[@]}
for ((i = 0; i < nfiles; i += 5)); do
    for ((j = i; j < nfiles; j++)); do
        # Do something with ${files[$j]}
    done
done

答案 1 :(得分:0)

您可以保留外部循环,以便读取目录/somedir/中的所有文件/目录:

filesToBeRead=5
chunkFiles=()
for f in /somedir/*; do
    chunkFiles+=( "$f" )
    if [[ ${#chunkFiles[@]} -eq 5 ]]; then
        processChunkFiles( "${chunkFiles[@]}" )
        chunkFiles=()
    fi
done
processChunkFiles( "${chunkFiles[@]}" )

PS:您需要编写processChunkFiles函数来处理/处理5个文件。