我想迭代给定目录中的文件。我尝试使用相同的for循环......但我在这个循环中有另一个循环,我需要读取多个文件,直到条件在该循环内为真,一次上传...但是内部循环我是因为文件迭代器循环在内部循环之外,所以只能访问一个文件。 有没有像file.getNext这样的东西,所以我可以访问循环内的文件数而不使用索引/循环。
我需要这样的东西:
while [ count -le $uploadRate ]
do
files="$files,directory.getNextFile"
$(curl -o $log_Path -T "{$files}" url)
done
其中$files
一次会上传多少个文件
我不想将文件加载到数组中,因为目录有大量文件,所以数组不可行,所以想迭代目录,如getNext文件。
答案 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个文件。