여러 디렉터리를 별도의 zip 파일로 압축하는 명령

여러 디렉터리를 별도의 zip 파일로 압축하는 명령

수십 개의 디렉토리가 포함된 디렉토리가 있습니다.

저는 명령줄을 처음 접했고 각 하위 디렉터리를 고유한 sub-directory.zip 파일로 압축하는 명령을 찾는 데 어려움을 겪고 있습니다.

따라서 결국 내 홈 디렉토리는 원래의 모든 하위 디렉토리와 .zip각 하위 디렉토리의 압축된 내용을 포함하는 해당 파일로 채워지게 됩니다.

그런 일이 가능합니까? 그렇다면 어떻게 되었는지 알려주세요.

답변1

이 루프를 다음에서 사용할 수 있습니다 bash.

for i in */; do zip -r "${i%/}.zip" "$i"; done

i루프 변수의 이름입니다. */현재 디렉터리의 각 하위 디렉터리를 나타내며 해당 이름 뒤에 슬래시가 포함됩니다. 이 작업을 수행하기 전에 cd올바른 위치에 있는지 확인하십시오 . "$i"후행 슬래시를 포함하여 디렉토리 이름을 지정하십시오. 따옴표는 디렉터리 이름의 공백으로 인해 문제가 발생하지 않도록 해줍니다. ${i%/}유사 $i하지만 후행 슬래시가 제거되어 zip 파일의 이름을 구성하는 데 사용할 수 있습니다.

작동 방식을 보려면 앞에 추가하면 echo명령 zip이 실행되는 대신 인쇄되는 것을 볼 수 있습니다.

병렬 실행

병렬로 실행하려면 다음을 사용할 수 있습니다 &.

for i in */; do zip -0 -r "${i%/}.zip" "$i" & done; wait

우리는 이를 사용하여 wait종료하기 전에 모든 백그라운드 작업이 완료될 때까지 기다리도록 셸에 지시합니다.

이 코드는 병렬 작업 수를 제한하지 않으므로 현재 디렉터리에 폴더가 너무 많으면 컴퓨터가 과부하될 수 있습니다.

답변2

Windows/Batch에서 이 작업을 수행하려면 여기에 제가 작성한 유사한 스크립트가 있습니다.

@ECHO OFF
REM Cycle Through all of the directories in the current folder
for /D %%d in (*) do (
    REM Change to the directory
    pushd %%d
    REM Make the destination directory.
    mkdir "Z:\%%d"

    REM Cycle Through all Subdirectories
    for /D %%b in (*) do (
        REM Zip up all subdirectores, and put it in the destination.
        7z -r a "Z:\%%d\%%b.zip" %%b
    )
    popd
)

관련 정보