首页 > 其他分享 >.sh 脚本来检索指定文件夹下的所有 Excel 文件

.sh 脚本来检索指定文件夹下的所有 Excel 文件

时间:2024-12-20 16:55:14浏览次数:4  
标签:文件 TEMP Excel EXCEL sh 关键字 文件夹 FILE DIR

编写一个 .sh 脚本来检索指定文件夹下的所有 Excel 文件,并根据关键字进行处理。以下是一个详细的示例脚本,包括查找文件、转换为 CSV、搜索关键字、记录结果,并将符合条件的文件移动到指定目录。

脚本示例

#!/bin/bash

# 定义要搜索的文件夹和关键字
FOLDER_PATH="/path/to/your/folder"
KEYWORD="your_keyword"
OUTPUT_LOG="output.log"
DESTINATION_FOLDER="/path/to/destination/folder"

# 创建一个临时目录来存放转换后的CSV文件
TEMP_DIR=$(mktemp -d)

# 初始化日志文件
> "$OUTPUT_LOG"

# 查找所有Excel文件
find "$FOLDER_PATH" -type f \( -name "*.xlsx" -o -name "*.xls" \) | while read -r EXCEL_FILE; do
    # 将Excel文件转换为CSV文件
    xlsx2csv "$EXCEL_FILE" > "$TEMP_DIR/$(basename "$EXCEL_FILE").csv"
    
    # 搜索关键字
    if grep -q "$KEYWORD" "$TEMP_DIR/$(basename "$EXCEL_FILE").csv"; then
        echo "Found keyword in: $EXCEL_FILE" >> "$OUTPUT_LOG"
        # 移动文件到指定目录
        mv "$EXCEL_FILE" "$DESTINATION_FOLDER/"
    fi
done

# 清理临时目录
rm -rf "$TEMP_DIR"

# 输出日志文件内容
cat "$OUTPUT_LOG"

解释

  1. 定义变量:

    • FOLDER_PATH:指定要搜索的文件夹路径。
    • KEYWORD:指定要搜索的关键字。
    • OUTPUT_LOG:指定日志文件的名称,用于记录找到的关键字和文件路径。
    • DESTINATION_FOLDER:指定符合条件的文件将被移动到的目录。
  2. 创建临时目录:

    • TEMP_DIR=$(mktemp -d):创建一个临时目录来存放转换后的 CSV 文件。
  3. 初始化日志文件:

    • > "$OUTPUT_LOG":清空或创建日志文件。
  4. 查找所有 Excel 文件:

    • find "$FOLDER_PATH" -type f \( -name "*.xlsx" -o -name "*.xls" \):使用 find 命令查找指定文件夹下的所有 .xlsx 和 .xls 文件。
  5. 转换 Excel 文件为 CSV 文件:

    • xlsx2csv "$EXCEL_FILE" > "$TEMP_DIR/$(basename "$EXCEL_FILE").csv":使用 xlsx2csv 将每个 Excel 文件转换为 CSV 文件,并保存到临时目录中。
  6. 搜索关键字:

    • if grep -q "$KEYWORD" "$TEMP_DIR/$(basename "$EXCEL_FILE").csv"; then:使用 grep 命令在 CSV 文件中搜索关键字。如果找到关键字,将文件路径记录到日志文件中,并将文件移动到指定目录。
  7. 清理临时目录:

    • rm -rf "$TEMP_DIR":删除临时目录及其内容。
  8. 输出日志文件内容:

    • cat "$OUTPUT_LOG":输出日志文件的内容,以便查看结果。

运行脚本

  1. 保存脚本:将上述脚本保存为 search_excel.sh
  2. 赋予执行权限:
    chmod +x search_excel.sh
    
  3. 运行脚本:
    ./search_excel.sh
    

扩展功能

  • 记录更多详细信息:如果需要记录更多详细信息,可以在日志文件中添加更多内容。例如:

    if grep -q "$KEYWORD" "$TEMP_DIR/$(basename "$EXCEL_FILE").csv"; then
        echo "Found keyword in: $EXCEL_FILE at $(date)" >> "$OUTPUT_LOG"
        mv "$EXCEL_FILE" "$DESTINATION_FOLDER/"
    fi
    
  • 处理多个关键字:如果需要处理多个关键字,可以使用一个关键字列表并循环处理。例如:

    KEYWORDS=("keyword1" "keyword2" "keyword3")
    
    find "$FOLDER_PATH" -type f \( -name "*.xlsx" -o -name "*.xls" \) | while read -r EXCEL_FILE; do
        xlsx2csv "$EXCEL_FILE" > "$TEMP_DIR/$(basename "$EXCEL_FILE").csv"
        
        for KEYWORD in "${KEYWORDS[@]}"; do
            if grep -q "$KEYWORD" "$TEMP_DIR/$(basename "$EXCEL_FILE").csv"; then
                echo "Found keyword $KEYWORD in: $EXCEL_FILE" >> "$OUTPUT_LOG"
                mv "$EXCEL_FILE" "$DESTINATION_FOLDER/"
                break
            fi
        done
    done
    

通过以上步骤,你可以编写一个功能完善的 .sh 脚本来检索指定文件夹下的所有 Excel 文件,并根据关键字进行处理。

标签:文件,TEMP,Excel,EXCEL,sh,关键字,文件夹,FILE,DIR
From: https://www.cnblogs.com/f9264/p/18619570

相关文章

  • 分批将数据导入Excel,模拟数据
    1、pom.xml<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.0.0</version></dependency><dependency><groupId>org.apa......
  • 工具分享 | TPscan - 一键ThinkPHP漏洞检测getshell
    0x00工具介绍TPscan是一款基于Python3的ThinkPHP漏洞检测工具。0x01下载链接TPscan下载链接:Tpscan下载0x02功能介绍thinkphp_checkcode_time_sqli_verifythinkphp_construct_code_exec_verifythinkphp_construct_debug_rce_verifythinkphp_debug_index_ids_sqli_v......
  • 「SHUPC 2024」 函数
    题意求题目中给出的函数值。分析Way1直接模拟,由于题目有spj,所以可以用c++自带函数算。虽然没有\(\cot\)函数,但是可以用\(\frac{1}{\tan}\)代替。c++没有自带\(\pi\),但是可以用\(\arccos(-1)\)表示。Way2我们用画图软件画一下这个函数的图像。看图可知,对于实......
  • idea poi 读取Excel文件数据
    Filefile=newFile("D:\\Users\\Administrator\\Desktop\\demo.xlsx");try{FileInputStreamstream=newFileInputStream(file);XSSFWorkbookworkbook=newXSSFWorkbook(stream);//读取sheet页XSSFSheetsheet=workbook.getSheetAt(......
  • WPF DashStyles,Solid,Dash,Dot,DashDot,DashDotDot
    <Windowx:Class="WpfApp73.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.......
  • 「CF992E」 Nastya and King-Shamans
    题意给定一个序列 \(a_i\) ,记其前缀和序列为 \(s_i\) ,有 \(q\) 个询问,每次单点修改,询问是否存在一个 \(i\) 满足 \(a_i=s_i−1\)​ ,有多解输出任意一个,无解输出 \(−1\) 。分析考虑一个很暴力的解法,每次修改都直接在原数组上改,然后再遍历一遍寻找答案,这样毫无疑问......
  • Linux SSH远程连接工具FinalShell下载及基本使用
     1.FinalShell下载安装官网:FinalShell官网1.1.FinalShell软件下载1.点击官网带有系统及版本的信息行到下载地址列表页面。2.选择自我系统匹配的版本,点击下方链接进行下载。1.2.FinalShell软件安装1.下载文件为exe(finalshell_windows_x64.exe)Windows可执行文件,直接......
  • window11如何让文件夹显示C:\Users\52426中52426这个隐藏文件夹,只想要这个不隐藏,其
    问题:window11如何让文件夹显示C:\Users\52426中52426这个隐藏文件夹,只想要这个不隐藏,其他的文件夹已隐藏解决方法:一行代码即可attrib-s-h"C:\Users\52426"方法1:通过文件夹属性设置显示所有隐藏的文件夹:首先,你需要确保文件资源管理器能够显示所有隐藏的文件和文......
  • 流量治理架构对比:当Kmesh遇上Ambient Mesh
    本文分享自华为云社区《流量治理架构对比:当Kmesh遇上AmbientMesh》,作者:云容器大未来。Kmesh是业内首个内核级流量治理引擎,Kmesh创新性地将服务治理卸载到内核eBPF和中心代理。Kmesh目前有两种工作模式:Kernel-Native 和 Dual-Engine模式。 Kernel-Native模式,Kmesh将流量治理......
  • NET SHARE 命令用于共享资源和管理共享,NET SHARE 命令不仅是一个基本的文件共享管理工
    这条命令的语法是:CopyCodeNETSHAREsharenamesharename=drive:path[/GRANT:user,[READ|CHANGE|FULL]][/USERS:number|/UNLIMITED][/REMARK:"text"]......