zip 파일을 rar로 변환 하시겠습니까?


5

수만 개를 변환하는 방법에 대한 제안 zip ~에 파일 rar 체재? 응용 프로그램 또는 명령 줄 도구를 사용해도됩니다.


왜 그걸하고 싶니?
lhf

잘 작동하는 만화 뷰어가 있습니다. .rar 파일은 아니지만 .zip 파일.
ohho

답변:


5

당신이 할 수있는 일은 사용할 작은 배치 파일을 만드는 것입니다. RAR , Mac 용 셰어웨어 명령 줄 유틸리티 (무료 rar 명령 줄 유틸리티를 찾지 못했지만 RAR은 시험 버전으로 제공됨).

rar 명령 설치하기

RAR을 터미널에 설치하려면 간단히 복사하십시오. rarunrar 너에게 bin 폴더.

해당 사이트에 액세스하려면 bin 디렉토리에서 Terminal.app를 열고 다음을 입력하십시오.

open ­/bin

RAR의 Windows 버전은 "변환" zip 에 보관하다 rar 도구에 보관하지만, 맥 버전은이 기능을 가지고 있지 않습니다. 솔루션은 각 파일을 개별 폴더로 압축 한 다음 해당 폴더의 RAR 콘텐츠로 바로 압축 해제하는 것입니다.

해결책

#!/bin/bash
# shell script that will convert zip files into rar files
# Require RAR for Mac os x to be placed in bin folder

# Working directory, use ~ for home folder shortcut :)
WorkingDirectory=~/test

# Temp directory that will be used for zip files manipulation
# Will prevent loop from raring other folders ;)
TempDirectory="${WorkingDirectory}"/zipToRarTemp

# Target Directory is where you want the rar files to go after the process
TargetDirectory="${WorkingDirectory}"

# Let's create the directories
mkdir "${TempDirectory}"
mkdir "${TargetDirectory}"

# Will loop into WorkingDirectory and unzip each .zip files
for file in "${WorkingDirectory}"/*.zip
do
    # Get file name
    # See http://stackoverflow.com/questions/965053/extract-filename-and-extension-in-bash
    # 1st answer
    filename=$(basename "$file")
    extension="${filename##*.}"
    filename="${filename%.*}"

    # Temp folder in the loop
    tempFolderToRar="${TempDirectory}"/"${filename}"

    # Create folders to rar later
    mkdir "${tempFolderToRar}"

    # unzip -d folder/extract/to fileToExtract.zip
    unzip -d "${TempDirectory}"/"${filename}" "${file}"

    # rar all the files in tempFolderToRar into the target
    rar a "${TargetDirectory}"/"${filename}".rar "${tempFolderToRar}"
done

# Optionnaly, delete temp directory if different from target
if [ "${TempDirectory}" != "${TargetDirectory}" ]
    then
    rm -r "${TempDirectory}"
fi

이것을 확장자가없는 파일에 저장하십시오. 첫 번째 변수에 좋은 경로를 설정해야하며 terminal.app에서 잘 실행해야합니다.

결론

글쎄, 그것은 나를 위해 일했다.

참고 :이 스크립트는 완벽하지 않습니다. 어쩌면 더 좋은 방법이 있을지 모르지만 작동합니다;) 첫 번째 쉘 스크립트 중 하나 였고 매개 변수가 더 좋거나 파이썬과 함께 사용하는 것이 좋을 것입니다.)

희망이 도움이됩니다.


모든 초보자 용 bash 프로그래머가이 품질의 코드를 작성한다면 스크립트 세계가 더 좋은 장소가 될 것입니다! 잘 했어.
nohillside

고마워, 그건 내 처음으로 bash 스크립트 ^ ^입니다. 나는 학습 목적을 위해 많은 의견을 썼다.
GabLeRoux

1
rm -r ${TempDirectory}, mkdir ${TempDirectory}, 및 mkdir ${TargetDirectory} 큰 따옴표로 묶어야합니다. 아마도 다음과 같은 것을 사용해야합니다. mktemp -td 또는 mkdir /tmp/$(uuidgen) 임시 디렉토리를 작성합니다. rar 아카이브의 파일은 다음 위치로 추출됩니다. $PWD/$TempDirectory.
Lri

4

다음은 GabLeRoux가 게시 한 간단한 스크립트입니다. rar 에서 다운로드 할 수 있습니다. http://www.rarlab.com/download.htm .

#!/bin/bash

for f in ~/Desktop/*.zip; do
    d=/tmp/$(uuidgen)
    unzip "$f" -d $d
    cd "$d"
    rm -rf __MACOSX
    ~/bin/rar a "${f%zip}rar" *
    rm -r "$d"
done

오류가 있습니다. cd .. 어딘가에 누락되었습니다 :-)
nohillside

너 무슨 뜻이야? 시작시 glob 표현식은 다음과 같습니다. ~/Desktop/*.zip 테스트 용.
Lri

$ d에 cd하지만 어디에서 다시 디렉토리를 빠져 나갈 수 있습니까?
nohillside

1
스크립트가 아카이브를 변환 한 후에 무언가를하지 않으면 말단의 PWD는 중요하지 않습니다. 서브 쉘에서 스크립트를 실행하여 보관할 수 있습니다. ( ) 또는 같이 oldpdw="$PWD" ... cd "$oldpwd".
Lri

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.