gpt4 book ai didi

linux - Bash,按大小将目录中的文件分成组(低性能)

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:49 25 4
gpt4 key购买 nike

我的 Bash 脚本在将目录中的所有文件拆分为组时遇到问题,其中每个组大小为 1GB。

我有一个如下所示的脚本:

#!/bin/bash
path=$1
unset i
echo $path start
fpath=`pwd`"/files"
find "$path" -type f>files
max=`wc -l $fpath | awk '{printf $1}'`
while read file; do
files[i]=$file
size[i]=$(du -s $file | awk '{printf $1}')
((i++))
echo -ne $i/$max'\r'
done < `pwd`"/files"
echo -ne '\n'
echo 'sizes and filenames done'
unset weight index groupid
for item in ${!files[*]}; do
weight=$((weight+${size[$item]}))
group[index]=${files[$item]}
((index++))
if [ $weight -gt "$((2**30))" ]; then
((groupid++))
for filename in "${group[@]}"
do
echo $filename
done >euenv.part"$groupid"
unset group index weight
fi
done
((groupid++))
for filename in "${group[@]}"
do
echo $filename
done >euenv.part"$groupid"
echo 'done'

它可以工作,但速度很慢。谁能帮助我并给我一些如何让它更快的建议?谢谢

最佳答案

以下是我的一些建议,我自己没有实现过,所以我无法判断他们的性能会有何改进,但我希望他们能给您建议如何使其更快。

  • 替换时可以避免第一个循环

重量=$((重量+${尺寸[$item]}))

在第二个循环中:

size=$(du -s ${files[$item]} | awk '{printf $1}')

  • 替换时可以避免临时文件files

${!files[*]} 中的项目;做

查找“$path”-type f |读取文件时

并将 ${files[$item]} 替换为 ${file}

  • 可以避免检查文件大小,而不是

查找“$path”-type f

你使用

查找“$path”-type f -ls

并提取具有名称和大小的列。

关于linux - Bash,按大小将目录中的文件分成组(低性能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16444408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com