델타 이름이 있는 2000개 이상의 폴더에 대한 루프를 생성하여 동일한 델타 이름을 가진 아카이브로 압축합니다.

델타 이름이 있는 2000개 이상의 폴더에 대한 루프를 생성하여 동일한 델타 이름을 가진 아카이브로 압축합니다.

저는 bash 및 SE 초보자이며 도움이 필요합니다. Debian 서버에 2000개가 넘는 폴더(이름은 1000씩 증가)가 있고 이러한 폴더를 소스의 폴더 1에 해당 증분 이름이 있는 별도의 저장소 전용 아카이브로 압축해야 합니다. 계층 구조를 업그레이드합니다. 그런 다음 각 아카이브를 생성한 후 소스 파일 폴더를 삭제해야 합니다.

따라서 아래 코드는 내가 필요한 작업을 수행하지만 현재 내 생각은 동일한 줄을 2000번 이상 반복하는 것입니다. 루프를 사용하여 이 프로세스를 몇 줄로 자동화하는 더 좋은 방법이 있는지 궁금합니다. 하위 폴더 변수를 추측할까요?

도움을 주세요. 매우 감사합니다!

#!/bin/bash

cd private/completed/0/ && zip -r -0 ../0.zip ./* && rm -R 0/ && cd -
cd private/completed/1000/ && zip -r -0 ../1000.zip ./* && rm -R ../1000 && cd -
cd private/completed/2000/ && zip -r -0 ../2000.zip ./* && rm -R ../2000 && cd -
cd private/completed/3000/ && zip -r -0 ../3000.zip ./* && rm -R ../3000 && cd -
cd private/completed/4000/ && zip -r -0 ../4000.zip ./* && rm -R ../4000 && cd -
....

cd private/completed/2800000/ && zip -r -0 ../2800000.zip ./* && rm -R ../2800000 && cd -

고쳐 쓰다:Kusalananda님, 유용한 링크를 제공해 주셔서 대단히 감사합니다(여러 디렉터리를 별도의 zip 파일로 압축하는 명령). 관련 답변의 코드를 사용하고 필요한 방식으로 정확하게 작동하도록 약간 수정했습니다. 다음 결과 코드를 추가했습니다.

#!/bin/bash
cd private/completed/
for i in {0..2800000..1000}; do echo "$i" ; cd "$i" ; zip -q -r -0 ../"${i%/}.zip" . && cd .. && rm -R "$i" ; done

답변1

예를 들어 다음과 같이 for 루프를 사용할 수 있습니다.

for  i in `seq 1000 1000 2000000`;do echo $i; done;

cp 명령을 사용하고 $i를 디렉터리 이름과 폴더 이름으로 사용할 수 있습니다.

답변2

고쳐 쓰다:Kusalananda님, 유용한 링크를 제공해 주셔서 대단히 감사합니다(여러 디렉터리를 별도의 zip 파일로 압축하는 명령). 관련 답변의 코드를 사용하고 필요한 방식으로 정확하게 작동하도록 약간 수정했습니다. 다음 결과 코드를 추가했습니다.

#!/bin/bash
cd private/completed/
for i in {0..2800000..1000}; do echo "$i" ; cd "$i" ; zip -q -r -0 ../"${i%/}.zip" . && cd .. && rm -R "$i" ; done

관련 정보