MacOS / Windows - 複数のzipから特定の.jsonファイルを抽出し、.jsonファイルの名前を抽出されたフォルダに変更する方法

MacOS / Windows - 複数のzipから特定の.jsonファイルを抽出し、.jsonファイルの名前を抽出されたフォルダに変更する方法

私はCuckoo Sandboxからエクスポートされたデータで作業しており、各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

シェルスクリプトファイルにいくつかのエラーがあります。次のコードで問題を解決しました。バッシュ-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

おすすめ記事