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

使用bash脚本迭代目录中的文件,bash,Bash,我想迭代给定目录中的文件。我尝试使用for循环来实现相同的。。。但是我在这个循环中有另一个循环,我需要读取多个文件,直到循环中的条件为真,然后一次上载。。。但使用内部循环,我只能访问一个文件,因为文件迭代器循环位于内部循环之外。 是否有类似file.getNext的东西,这样我就可以在不使用index/loop的情况下访问循环中的文件数 我需要这样的东西: while [ count -le $uploadRate ] do files="$files,directory.getNextF

我想迭代给定目录中的文件。我尝试使用for循环来实现相同的。。。但是我在这个循环中有另一个循环,我需要读取多个文件,直到循环中的条件为真,然后一次上载。。。但使用内部循环,我只能访问一个文件,因为文件迭代器循环位于内部循环之外。 是否有类似file.getNext的东西,这样我就可以在不使用index/loop的情况下访问循环中的文件数

我需要这样的东西:

while [ count -le $uploadRate ]
do
   files="$files,directory.getNextFile"
   $(curl -o $log_Path -T "{$files}" url)
done
其中,
$files
一次上载的文件数
我不想将文件加载到数组中,因为目录中有大量的文件,所以数组是不可行的选项,所以希望像getNext file一样在目录上迭代。

您可以像这样保留外部循环以读取目录中的所有文件/目录
/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个文件。

将文件名放入一个数组中,并以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
files=(/path/to/dir/*)
n文件=${#文件[@]}
对于((i=0;i
我不明白这个问题。你的内环在哪里?另外,为什么在
$(…)
中有
curl
,右括号在哪里?上面的while循环是内部循环,我希望在该循环中一次读取5个文件。但是要读取文件,我需要应用另一个条件,如一次读取5个文件。。那我该怎么做呢。。我希望这样,如果(filesToBeRead==5)#然后读取前5个文件并执行一些操作谢谢!这很有帮助。嘿,我正面临一些问题。因为我们使用的是“for f in/somedir/*;”,它本身的工作原理类似于数组,因为它加载f中的所有文件。所以,如果我保存数千份文件。处理时间变慢了。请您提出任何可行的解决方案,以便f对象不必担心该目录下存在的文件数。感谢您的回复。事实上,我不想使用数组,因为我有数百万个文件要读取,我不认为将文件读取到数组中是可行的解决方案,因为数组的大小会很大,如果你不这么认为,请告诉我knw。如果我们还有其他选择的话。