디렉토리에서 파일의 7zip 아카이브를 만드는 방법(기존 아카이브 제외)은 무엇입니까?

디렉토리에서 파일의 7zip 아카이브를 만드는 방법(기존 아카이브 제외)은 무엇입니까?

~ 고 싶어요7zip다음의 모든 파일루트/현재폴더와는 별개로모든zip 파일 및 모든 7z/7zip 파일. 나는 if !성명서에서 한 번에 그 중 하나만 작동하도록 할 수 있습니다:

for file in ./test2/*
do

    if ! { `file $file  | grep -i zip > /dev/null 2>&1` && `file $file  | grep -i 7z > /dev/null 2>&1`; }; then 

    ## Most of the zip utilities contain "zip" when checked for file type. 
    ## grep for the expression that matches your case

      7z a -mx0 -mmt2 -tzip "${file%/}.cbz" "$file"
      rm -rf "$file"

    fi
done

{list;};다른 게시물의 "목록" 기준을 따랐 지만 운이 없었습니다.


내 현재 솔루션은둥지 if다음과 같은 진술:

for file in ./test2/*
do
    if ! `file $file  | grep -i 7z > /dev/null 2>&1`; then 

        if ! `file $file  | grep -i zip > /dev/null 2>&1`; then 
        ## first if its not 7z, now also if not zip.

          7z a -mx0 -mmt2 -tzip "${file%/}.cbz" "$file"
          rm -rf "$file"

        fi

    fi

done

남은 것은 디렉토리를 제외하는 것뿐입니다. 모든 파일이 이동됩니다. 어떻게?

답변1

출력을 개별적으로 가져온 file다음 case여러 테스트 또는 명령문에서 사용합니다.

for file in ./test2/*; do
    filetype=$( file "$file" )

    if [[ $filetype == *7z*  ]] ||
       [[ $filetype == *zip* ]]
    then
        # skip these
        continue
    fi

    # rest of body of loop here
done

또는,

for file in ./test2/*; do
    filetype=$( file "$file" )

    case $filetype in
       *7z*)  continue ;;  # skip these
       *zip*) continue ;;  # and these
    esac

    # rest of body of loop here
done

file자유 형식 텍스트 문자열 대신 MIME 유형을 출력 할 수도 있습니다 . 이렇게 하면 file -i스크립트의 이식성이 약간 더 좋아질 것입니다(관심 있는 경우). file(1)설명서( )를 참조하세요 man 1 file.

디렉토리를 제외하려면 다음을 사용하십시오.

if [ -d "$file" ]; then
    continue
fi

전화하기 전에 file.

또는 단락 구문을 사용하십시오.

[ -d "$file" ] && continue

위에 사용된 모든 인스턴스에서 이 continue문은 현재 반복의 나머지 부분을 건너뛰고 루프의 다음 반복을 계속합니다. 현재 값이 $file우리가 사용할 수 있는 값이라고 확신할 때 다음을 사용합니다.아니요이번 반복에서 작업하고 싶습니다. 이는 작업이 실행될 때 테스트 세트를 작성하려고 하는 작업과 반대입니다.~해야 한다처형되다.

호환되는 스크립트는 /bin/sh다음과 같이 표시됩니다.

#!/bin/sh

for file in ./test2/*; do
    [ -d "$file" ] && continue

    filetype=$( file "$file" )

    case $filetype in
       *7z*)  continue ;;  # skip these
       *zip*) continue ;;  # and these
    esac

    # rest of body of loop here
done

관련 정보