>

각각 4 개의 파일을 포함하는 여러 개의 .zip 폴더 (약 600 개)를 포함하는 폴더 트리가 있습니다. 각 폴더에서 하나의 파일 만 추출하여 별도의 폴더로 복사하고 싶습니다. 복잡하게하기 위해 파일의 이름은 각 폴더에 동일합니다.이 작업을 수행 할 수있는 스크립트가 있습니까? 도움을 주셔서 감사합니다.

  • 답변 # 1

    다음을 시도 할 수 있습니다 :

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

    와이즈 비즈 교체  대상 경로와 함께. 그리고 DESTDIR  파일 이름으로 추출하려는 각 .zip 파일의 파일 zip 파일의 파일 이름에 따라 파일 이름이 바뀝니다.

  • 답변 # 2

    Info-Zip의 THEFILE  프로그램은 파일 이름에서 glob 패턴을 인식 할 수 있습니다. 따라서 unzip 라는 파일이 많은 zip 파일이있는 경우  다른 폴더에 :

    file1.gz
    
    

    이것은 $ unzip FolderName.zip '*/file1.gz' Archive: FolderName.zip extracting: FolderName/b/c/file1.gz extracting: FolderName/b/e/file1.gz extracting: FolderName/b/f/file1.gz 라는 사실에도 불구하고  또한 FolderName.zip 보다다른이라는 파일도 포함합니다. . 원하는 파일을 glob 패턴과 일치시킬 수 있으면 file1.gz  그것을 추출 할 수 있습니다.

    다른 주석에서이 추출 된 파일을 모두 연결해야한다는 인상을 받았습니다. unzip 를 포함하는 최상위 폴더를 가정하면 이와 같은 것이 원하는 것을 수행합니다.  출력을 unzip 라고합니다. 및 대상 파일 ( FolderName )는 모든 하위 폴더에서 동일한 폴더 깊이에 있습니다.

    file1.gz
    
    

    즉, $ gzcat FolderName/*/*/file1.gz > one-big-uncompressed-log-file 를 꺼내기 위해 두 개의 하위 폴더 레벨을 건너 뜁니다.  파일을 압축 해제하고 일반적인 file1.gz 로 연결합니다.  프로그램, gzcat 를 찾을 수있는 모든 곳에서 발견  지원합니다.

    gzip

관련 자료

  • 이전 리눅스 RAID 어레이를 재 구축 하시겠습니까?
  • 다음 text processing - 2 열에 값이있는 경우 행을 인쇄하는 쉘 스크립트