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

관련 정보