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