sh脚本,如果excelA列和文件名称一致,文件打包成文件夹,用B列和C列命名
时间: 2024-11-03 22:23:07 浏览: 25
在Linux shell脚本中,你可以使用`awk`, `tar`, 和 `gzip` 这些工具来实现这个功能。假设你有一个名为"file_list.txt"的文本文件,其中包含了Excel表格的行信息,每行包含三列:A列为文件路径,B列为文件夹名称,C列为压缩包文件名。你可以按照以下步骤编写脚本:
```bash
#!/bin/bash
# 读取文件列表
while IFS=',' read -r file_path folder_name archive_name; do
# 检查A列(文件路径)是否与文件名一致
if [[ $file_path == *"$archive_name"* ]]; then
# 创建对应文件夹,如果不存在的话
mkdir -p "$folder_name"
# 将文件移动到该文件夹中
mv "$file_path" "$folder_name/$archive_name"
# 如果需要,将文件夹内的内容打包并压缩
if [ "$folder_name/$archive_name" != "$file_path" ]; then
tar czf "$folder_name/$archive_name.tar.gz" "$folder_name/"
fi
fi
done < file_list.txt
相关问题
编写一个shell脚本,遍历当前文件夹下的所有文件。如果子文件夹下包含cmd.sh 就执行 sh cmd.sh。 a文件夹和b文件夹优先执行
你可以使用以下 Shell 脚本来实现你的需求:
```bash
#!/bin/bash
# 遍历 a 文件夹下所有文件和子文件夹,执行 cmd.sh
for file in $(find ./a -type f); do
if [[ $file == */cmd.sh ]]; then
sh $file
fi
done
# 遍历 b 文件夹下所有文件和子文件夹,执行 cmd.sh
for file in $(find ./b -type f); do
if [[ $file == */cmd.sh ]]; then
sh $file
fi
done
# 遍历其他文件夹下所有文件和子文件夹,执行 cmd.sh
for file in $(find . -type f); do
if [[ $file == */cmd.sh && $file != */a/* && $file != */b/* ]]; then
sh $file
fi
done
```
这个脚本会先遍历 `a` 文件夹下的所有文件和子文件夹,对于每个找到的文件,如果它的路径包含 `/cmd.sh`,则执行 `sh cmd.sh` 命令。然后它会遍历 `b` 文件夹下的所有文件和子文件夹,执行同样的操作。最后,它会遍历其他文件夹下的所有文件和子文件夹,对于每个找到的文件,如果它的路径包含 `/cmd.sh` 且不在 `a` 或 `b` 文件夹中,就执行 `sh cmd.sh` 命令。请注意,这个脚本同样假定当前文件夹下没有空格或其他特殊字符的文件名。如果有这样的文件名,你需要修改脚本以正确处理它们。
sh脚本按excel命名word
sh脚本通常用于Linux或Unix环境下,如果你想通过shell脚本来批量按照Excel文件名给Word文档命名,你可以采用以下步骤:
1. 首先,你需要安装读取Excel和操作Word文档的相关工具。例如,在Linux中,可以使用`xlsx2csv`转换Excel文件到CSV格式,然后使用`unoconv`将CSV转换成纯文本,最后使用`sed`或`awk`处理文件名并应用到Word模板。
```bash
# 安装必要的工具
sudo apt-get install libreoffice unoconv xlsx2csv
2. 将Excel文件转换为CSV:
```bash
xlsx2csv input.xlsx > temp.csv
```
3. 使用 LibreOffice 或者 unoconv 将CSV转换为Word:
```bash
unoconv -f docx temp.csv -o output.docx
```
4. 创建一个sh脚本,比如`rename_words.sh`,来自动循环执行以上操作:
```bash
#!/bin/bash
for file in *.xlsx; do
# 获取当前文件名
filename=$(basename "$file")
# 可能需要去除Excel扩展名
name=${filename%.xlsx}
# 转换和重命名
xlsx2csv "$file" > "${name}.csv"
unoconv -f docx "${name}.csv" -o "${name}.docx"
# 清理临时文件
rm "${name}.csv"
echo "Processed $file to ${name}.docx"
done
```
5. 给脚本添加执行权限:
```bash
chmod +x rename_words.sh
```
6. 运行脚本:
```bash
./rename_words.sh
```
注意:这只是一个基础示例,实际操作可能会因Excel文件的具体结构、Word模板的选择以及系统配置有所不同。如果你的Word模板不是简单的替换文件名,你可能需要额外编写脚本来处理内容。
阅读全文