目录树文件名映射深度1分组计数,tree(映射(目录A))

#!/bin/bash#【描述】  目录树文件名映射深度1分组计数,tree(映射(目录A))
#【术语】  
# agg==aggregate==聚合==统计==按照mime-type分组 
# FN==FileName==文件名
#【基本思路】 
# 0. linux gnu tree命令的优点: 目录结构树展示的很友好. 而且 单独做一个同样的展示效果 并不容易
# 1. tree命令的不支持点 
#     不支持对叶子节点(文件)的映射(比如映射文件到扩展名) 
#     不支持对目录节点的映射(比如目录下的扩展名分组统计)  
# 2. 先对目录A做映射(扩展名,扩展名分组统计) 映射的结果还是目录(B)
#     映射(目录A)==目录A
# 3. tree(目录B) == tree(映射(目录A))
# 4. 总结为: 映射(tree(目录A)) == tree(映射(目录A)) : 很像运算符的穿透
# [使用例子] 
#   1.目录树的文件mime-type统计
#   echo 'file --mime-type --brief $FN' >  /tmp/BuszCmd_MapFileNameToX && source /app/bash-simplify/dir_tree_group/tree_MapFN_Depth1Group_Cnt.sh && tree_MapFN_Depth1Group_Cnt /app/LineageOS_ota_xImg_ExtractTool/vendor/oneplus/sdm845-common/proprietary
#   2.目录树的文件扩展名统计
#   echo '  echo "$FN" | egrep ".*\..+" 1>/dev/null 2>/dev/null && echo "${FN##*.}" || echo "EmptyExtend" ' >  /tmp/BuszCmd_MapFileNameToX && source /app/bash-simplify/dir_tree_group/tree_MapFN_Depth1Group_Cnt.sh && tree_MapFN_Depth1Group_Cnt /app/LineageOS_ota_xImg_ExtractTool/vendor/oneplus/sdm845-common/proprietary
#  调试用 增加命令 sqlitebrowser  /tmp/sqlite3db_file.db  set -e -ufunction tree_MapFN_Depth1Group_Cnt(){[[ $# -lt 1 ]] && return 61rootD=$1local flagD="/tmp"local dbFP=$flagD/sqlite3db_file.dblocal rootDId=$(echo "$rootD" | sed 's/\//--/g') # / --> --local cmdF="$flagD/cmdF$rootDId"local aggRootD="$flagD/aggRootD$rootDId"local source_cmd="set -e -u; \n source /app/bash-simplify/dir_tree_group/tree_MapFN_Depth1Group_Cnt.sh"cd $rootD#生成命令文件cat <(echo -e "$source_cmd" ) <(find . -type d | xargs -I@  echo "dire_list_file_mime $dbFP $rootDId $aggRootD $rootD @") | tee "$cmdF" 1>/dev/null#删除先前的统计数据库rm -f $dbFPrm -fr $aggRootDbash   $cmdFtree -I mime_ls.csv $aggRootDecho "SELECT count(*)   sqlite表中文件记录总数 FROM tab_file;" | sqlite3  --line "$dbFP"  }function sqlite3_create_tab_import_fileNameLs() {[[ $# -lt 4 ]] && return 63local dbFP=$1local mimeLsCsvFP=$2local parentD=$3local dirName=$4which sqlite3 1>/dev/null || sudo apt install -y sqlite3 sqlitebrowser #建立表结构sqlite3  "$dbFP"  < <(echo -e """
CREATE TABLE IF NOT EXISTS tab_file (outParentD varchar(512) , parentD varchar(512),  dire varchar(128),  fileName varchar(128), mimeType varchar(64));
.exit
""")sqlite3   "$dbFP" <<EOF
.mode csv
.separator ;
.headers off  
.import $mimeLsCsvFP tab_file-- SELECT count(*) FROM tab_file;.exit
EOF}function dire_list_file_mime() {[[ $# -lt 5 ]] && return 62local dbFP=$1local rootDId=$2local aggRootD=$3local rootD=$4local dire=$5local agg_dire="$aggRootD/$dire"mkdir -p $agg_direlocal parentD=$(dirname $dire)local dirName=$(basename $dire)local outParentD=$aggRootD/$parentDlocal mimeLsCsvFP="$outParentD/mime_ls.csv"local mimeAggOutFP="$outParentD/mime_agg.txt"local directFileCnt=\
$(  cd $rootD && cd $dire && find . -maxdepth 1 -type f |wc -l ;)#............标记相同命令..............................
[[ $directFileCnt -eq 0 ]] && return 0 #若目录dire 无直接文件 则不处理
(   cd $rootD && cd $dire && find . -maxdepth 1 -type f | while read -r _FN ; do  ( FN="${_FN/.\//}" && mimeTyp=$(FN="$FN" bash /tmp/BuszCmd_MapFileNameToX) && echo  "$outParentD;$parentD;$dire;$FN;$mimeTyp"  ;) ; done | tee "$mimeLsCsvFP" 1>/dev/null;)#举例1: /tmp/BuszCmd_MapFileNameToX == 'file --mime-type --brief $FN'   #文件mimeType#举例2: /tmp/BuszCmd_MapFileNameToX == '  echo "$FN" | egrep ".*\..+" 1>/dev/null 2>/dev/null && echo "${FN##*.}" || echo "EmptyExtend" '      #文件的扩展名
# 'while read' 替换xargs举例: seq 1 4 |  while read -r k; do ( echo $k ;) ; donesqlite3_create_tab_import_fileNameLs $dbFP $mimeLsCsvFP $parentD $dirNamelocal sql="select mimeType,count(*) from tab_file where parentD='$parentD' and dire='$dire' group by mimeType ;"local mimeTyp_Cnt__Ls="$(sqlite3   "$dbFP"  < <( echo "$sql" )  )"mimeTyp_Cnt__Ls="$(echo "$mimeTyp_Cnt__Ls" | sed 's/\//--/g')" # / --> --mimeTyp_Cnt__Ls="$(echo "$mimeTyp_Cnt__Ls" | sed 's/|/=/g')" # / --> =echo "$mimeTyp_Cnt__Ls" | while read -r mimeTyp_Cnt ; do  ( touch "$agg_dire/${mimeTyp_Cnt}" ;) ; done
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/60092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c# 开发web服务 webserver

024-11-10<<<<<<<<<<<<<<<<<<<<<<<<<< 开始插件前Cyber_CallWeb acajax_dac_database_viewer 2024-11-10<<<<<<<<<<<<<<<<<<<<…

「C/C++」C/C++ 预处理 之 常用预处理宏

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

Javascript中如何实现函数缓存?函数缓存有哪些应用场景?

#一、是什么 函数缓存&#xff0c;就是将函数运算过的结果进行缓存 本质上就是用空间&#xff08;缓存存储&#xff09;换时间&#xff08;计算过程&#xff09; 常用于缓存数据计算结果和缓存对象 解释 const add (a,b) > ab; const calc memoize(add); // 函数缓存…

Maven的依赖管理、传递、冲突、父子工程的继承和聚合

目录 一、基于IDEA 进行Maven依赖管理 (一)依赖管理概念 (二)Maven工程核心信息配置和解读&#xff08;GAVP&#xff09; (三)Maven工程依赖管理配置 1.依赖管理和依赖添加 2.依赖版本统一提取和维护 (四)依赖范围 (五)Maven工程依赖下载失败错误解决&#xff08;重点…

iOS SmartCodable 替换 HandyJSON 适配记录

前言 HandyJSON群里说建议不要再使用HandyJSON&#xff0c;我最终选择了SmartCodable 来替换&#xff0c;原因如下&#xff1a; 首先按照 SmartCodable 官方教程替换 大概要替换的内容如图&#xff1a; 详细的替换教程请前往&#xff1a;使用SmartCodable 平替 HandyJSON …

1.2 图像处理基本操作

在本实战中&#xff0c;我们将学习如何使用OpenCV进行基本的图像处理操作。首先&#xff0c;我们将通过cv2.imread()函数读取图像&#xff0c;并使用cv2.imshow()在窗口中显示它。接着&#xff0c;我们将探索如何通过cv2.imwrite()保存图像&#xff0c;并设置不同的参数以控制图…

使用Python实现音频降噪

在音频处理领域&#xff0c;背景噪声是一个常见的问题。为了提高音频的质量&#xff0c;我们需要对音频进行降噪处理。本文将介绍如何使用 Python 实现音频降噪。 依赖库安装 在开始之前&#xff0c;我们需要安装以下依赖库&#xff1a; pydub&#xff1a;用于音频文件的读取…

与AMD GPU上的对比语言-图像预训练(CLIP)模型交互

Interacting with Contrastive Language-Image Pre-Training (CLIP) model on AMD GPU — ROCm Blogs 2024年4月16日&#xff0c;由Sean Song撰写. 引言 对比语言-图像预训练&#xff08;CLIP&#xff09;是一种多模态深度学习模型&#xff0c;连接视觉和自然语言。它在Open…

2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto- WriteUp

2024年第四届“网鼎杯”网络安全比赛---朱雀组Crypto-WriteUp Crypto&#xff1a;Crypto-2&#xff1a;Crypto-3&#xff1a; 前言&#xff1a;本次比赛已经结束&#xff0c;用于赛后复现&#xff0c;欢迎大家交流学习&#xff01; Crypto&#xff1a; Crypto-2&#xff1a; …

下载mysql的jar,添加至jmeter中,编写jdbc协议脚本1106

下载jar包&#xff1a; 步骤1&#xff1a;进入maven仓库官网https://mvnrepository.com/ 步骤2&#xff1a;搜索实际的数据库 步骤3&#xff1a;点击 Mysql connnector/J 步骤5、查看数据库的版本号&#xff0c;选择具体版本&#xff0c;我的是mysql 8.0.16,下图&#xff0c;…

从“点”到“面”,热成像防爆手机如何为安全织就“透视网”?

市场上测温产品让人眼花缭乱&#xff0c;通过调研分析&#xff0c;小编发现测温枪占很高比重。但是&#xff0c;测温枪局限于显示单一数值信息&#xff0c;无法直观地展示物体的整体温度分布情况&#xff0c;而且几乎没有功能拓展能力。以AORO A23为代表的热成像防爆手机改变了…

模型训练中GPU利用率低?

买了块魔改华硕猛禽2080ti&#xff0c;找了下没找到什么测试显存的软件&#xff0c;于是用训练模型来测试魔改后的显存稳定性&#xff0c;因为模型训练器没有资源监测&#xff0c;于是用了Windows任务管理器来查看显卡使用情况&#xff0c;却发现GPU的利用率怎么这么低&#xf…

开源代码管理平台Gitlab如何本地化部署并实现公网环境远程访问私有仓库

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 前言 本文主要介绍如何在Linux CentOS8 中搭建GitLab私有仓库并且结合内网穿透工具实现在公网…

在vue3的vite网络请求报错 [vite] http proxy error:

在开发的过程中 代理proxy报错: [vite] http proxy error: /ranking/hostRank?dateType1 Error: connect ETIMEDOUT 43.xxx.xxx.xxx:443 网络请求是http的: // vite.config.ts import { Agent } from node:http;server: {host: 0.0.0.0,port: port,open: true,https: false,…

云计算 esxi 如何 部署iscsi ,配合windows 2012 iscsi 存储

1 windows 2012 如何创建iscsi 存储服务器&#xff0c;看前面的文章 iscsi 服务上的地址 192.168.10.196 192.168.10.196 2 如何在esxi 创建iscsi 注意地址是192.168.10.196 这是服务器的地址 很明显这是我们esxi 主机上发现的iscsi 磁盘 、

【Python爬虫实战】深入解锁 DrissionPage:ChromiumPage 自动化网页操作指南

&#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、ChromiumPage基础操作 &#xff08;一&#xff09;初始化Drission 和 ChromiumPage 对象 &#xff0…

H5播放器EasyPlayer.js 流媒体播放器是否支持npm(yarn) install 安装?

EasyPlayer.js H5播放器是一款功能强大的H5视频播放器&#xff0c;它支持多种流媒体协议播放&#xff0c;包括WebSocket-FLV、HTTP-FLV、HLS&#xff08;m3u8&#xff09;、WebRTC等格式的视频流。它不仅支持H.264和H.265编码格式&#xff0c;还具备实时录像、低延时直播等功能…

2024年入职_转行网络安全,该如何规划?

前言 前段时间&#xff0c;知名机构麦可思研究院发布了 《2023年中国本科生就业报告》&#xff0c;其中详细列出近五年的本科绿牌专业&#xff0c;其中&#xff0c;信息安全位列第一。 网络安全前景 对于网络安全的发展与就业前景&#xff0c;想必无需我多言&#xff0c;作为…

ElasticSearch备考 -- 集群配置常见问题

一、集群开启xpack安全配置后无法启动 在配置文件中增加 xpack.security.enabled: true 后无法启动&#xff0c;日志中提示如下 Transport SSL must be enabled if security is enabled. Please set [xpack.security.transport.ssl.enabled] to [true] or disable security b…

力扣17-电话号码的数字组合

力扣17-电话号码的数字组合 思路代码 题目链接 思路 原题&#xff1a; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 输…