所以我有一个相当简单但写得非常糟糕的脚本来递归搜索目录,将.zips中的.zips提取到它们所在的文件夹中,并对提取的文件进行基本的错误检查和清理。为了记录,我完全缺乏能力,这个业务很好地说明了创建一个文件作为标志,以便从读取管道结构中获取信息。说实话,很快就会想到它从第一次尝试就起作用了,实际上并没有让文件混乱,所以我就把它留下了。我真的没有使用脚本的经验,除了玩C ++之外没有太多的经验,但是我正在努力让人觉得将shell编写成实际目的。问题是,即使我可以看到没有什么优雅的我如何做到这一点,而且搜索需要很长时间(比进入和列出目录本身更长)我真的不喜欢知道什么在减慢它。
我可以看到解压缩文件每个文件至少被调用几次,但它不像很多.zips的问题,而不是很多文件夹。是否有一些简单的我在清理这个问题方面错过了,或者我只是遇到了文件系统的现实(此时,通过搜索和提取在Windows上手动半自动执行此过程比自动化更快Linux *的)?更好的选择是接受这需要花费大量时间,让它在后台运行并将所有输出转储到日志中吗?
在任何情况下,如果你想涉及到这个,我的unzipr脚本的完整代码如下。
echo "" >> unzipr.log
echo "----" >> unzipr.log
echo " " >> unzipr.log
find . -name "*.zip" | while read filename; do
dir=$(dirname $filename)
unzip -nqq "$filename" -d "$dir"
if [[ $? == 0 ]] ; then
rm $filename
echo "$filename succesfully extracted"
else
#unzip -t "$filename"
echo "Error in $filename"
echo $filename >> unzipr.log
failed=true
echo >> unzipr.fail
fi ;
done
if [ -e unzipr.fail ] ; then
echo "EXTRACTION ERRRORS DETECTED"
rm unzipr.fail
exit 1
else
echo "Extraction successful"
exit 0
fi
*我刚刚想到我正在利用这些搜索的Windows搜索索引......我可能不得不回到这里的绘图板,不知道如何在第一次做与Linux相同的事情放置,更不用说自动了。
答案 0 :(得分:0)
如果你有很多文件,我想因为你使用shell而需要花费大量的开销。你启动了很多进程:dirname,unzip,rm。如果你运行命令“top”,我猜你会看到很多系统负载:操作系统需要启动太多进程。
我从17年开始每天使用shell,但对于这样的脚本,我使用python。
答案 1 :(得分:0)
不幸的是,没有进行严肃优化的余地。脚本的逻辑非常简单。从理论上讲,你可以并行解压缩文件并清除失败的文件,但我相信性能没有明显差异。
所以我的修复很简单,unzipr.fail文件在这里是多余的
echo "" >> unzipr.log
echo "----" >> unzipr.log
echo " " >> unzipr.log
find . -name "*.zip" | while read filename; do
dir=$(dirname $filename)
unzip -nqq "$filename" -d "$dir"
if [[ $? == 0 ]] ; then
rm $filename
echo "$filename succesfully extracted"
else
#unzip -t "$filename"
echo "Error in $filename"
echo $filename >> unzipr.log
failed=true
fi ;
done
if [ "$failed" ] ; then
echo "EXTRACTION ERRRORS DETECTED"
rm unzipr.fail
exit 1
else
echo "Extraction successful"
exit 0
fi