MacOS/Windows - 如何从多个 zip 中提取特定 .json 文件并将 .json 文件重命名为从中提取的文件夹

MacOS/Windows - 如何从多个 zip 中提取特定 .json 文件并将 .json 文件重命名为从中提取的文件夹

我正在处理布谷鸟沙箱导出的数据,每个 Zip 文件下都有 report.json 文件

例如 > 123456.zip 每个 zip 都有 zipfile/reports/report.json 中的文件

我的文件夹中有多个 zip 文件,我希望将该 zip 文件命名为 zipfilename.json。

我尝试了很多方法但都失败了

这是我正在尝试的代码

    #! /bin/bash

mkdir -p "DESTDIR"
for i in *.zip ; do
         unzip "$i" $i/reports/report.json -d "DESTDIR"
         mv "DESTDIR/reports/report.json" "DESTDIR/$(basename "$i" .zip)_THEFILE"
done

我得到的只是这个输出,显示该文件不存在

(base) s@Sais-MBP Downloads % sh script.sh 
Archive:  1959098.zip
caution: filename not matched:  1959098.zip/reports/report.json
mv: rename DESTDIR/THEFILE to DESTDIR/1959098_THEFILE: No such file or directory
Archive:  1959100.zip
caution: filename not matched:  1959100.zip/reports/report.json
mv: rename DESTDIR/THEFILE to DESTDIR/1959100_THEFILE: No such file or directory

非常感谢任何帮助,因为过去几天我无法取得任何进展。

答案1

只是 shell 脚本文件中的一些错误。我将其修复为以下代码(您可以使用bash-x如果需要的话可以调试和定制更多)

bash -x test.sh

笔记:运行相同的代码Windows 和 Mac 操作系统我认为你应该在 Windows 中使用 Linux WSL 或替换解压经过7z在下面的代码中:

#! /bin/bash
#
# save this file as test.sh
#
mkdir -p "DESTDIR"
for ZIPFILE in *.zip ; do
    NAME="${ZIPFILE%.*}"
    mkdir -p "DESTDIR/$NAME"
    unzip -j $ZIPFILE reports/report.json -d "DESTDIR/$NAME/"
    mv "DESTDIR/$NAME/report.json" "DESTDIR/$NAME.json"
done

相关内容