编写一个 .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"
解释
-
定义变量:
FOLDER_PATH
:指定要搜索的文件夹路径。KEYWORD
:指定要搜索的关键字。OUTPUT_LOG
:指定日志文件的名称,用于记录找到的关键字和文件路径。DESTINATION_FOLDER
:指定符合条件的文件将被移动到的目录。
-
创建临时目录:
TEMP_DIR=$(mktemp -d)
:创建一个临时目录来存放转换后的 CSV 文件。
-
初始化日志文件:
> "$OUTPUT_LOG"
:清空或创建日志文件。
-
查找所有 Excel 文件:
find "$FOLDER_PATH" -type f \( -name "*.xlsx" -o -name "*.xls" \)
:使用find
命令查找指定文件夹下的所有.xlsx
和.xls
文件。
-
转换 Excel 文件为 CSV 文件:
xlsx2csv "$EXCEL_FILE" > "$TEMP_DIR/$(basename "$EXCEL_FILE").csv"
:使用xlsx2csv
将每个 Excel 文件转换为 CSV 文件,并保存到临时目录中。
-
搜索关键字:
if grep -q "$KEYWORD" "$TEMP_DIR/$(basename "$EXCEL_FILE").csv"; then
:使用grep
命令在 CSV 文件中搜索关键字。如果找到关键字,将文件路径记录到日志文件中,并将文件移动到指定目录。
-
清理临时目录:
rm -rf "$TEMP_DIR"
:删除临时目录及其内容。
-
输出日志文件内容:
cat "$OUTPUT_LOG"
:输出日志文件的内容,以便查看结果。
运行脚本
- 保存脚本:将上述脚本保存为
search_excel.sh
。 - 赋予执行权限:
chmod +x search_excel.sh
- 运行脚本:
./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 文件,并根据关键字进行处理。