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

编写一个 .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 文件,并根据关键字进行处理。

posted @ 2024-12-20 16:46  FY丶  阅读(81)  评论(0)    收藏  举报