~ 고 싶어요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