수십 개의 디렉토리가 포함된 디렉토리가 있습니다.
저는 명령줄을 처음 접했고 각 하위 디렉터리를 고유한 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
)