쉘 스크립트 bash에서 하위 문자열을 확인하는 방법은 무엇입니까?

쉘 스크립트 bash에서 하위 문자열을 확인하는 방법은 무엇입니까?

실제로 문자열은 new.tar.gz입니다. 이 파일이 tarball인지 확인하고 싶습니다.

답변1

file명령어를 사용하여 확인해보세요.

$ file new.tar.gz
new.tar.gz: gzip compressed data, last modified: Tue Sep 26 16:50:00 2017, from Unix

압축된 파일의 내용을 검사하려면 압축을 풀고 file 을 실행해야 합니다.

$ gunzip -k new.tar.gz; file new.tar
new.tar: POSIX tar archive (GNU)

답변2

기술적으로 tar아카이브 파일을 호출할 수 있습니다.아무것. Unix에서는 파일 이름이 파일의 형식이나 내용을 결정하지 않습니다.

$filename그러나 변수 ether의 파일 이름이 .tar문자열로 끝나는지 또는 문자열을 포함하는지 확인하는 것으로 문제를 제한하면 다음과 같습니다 .tar..

case $filename in
    *.tar|*.tar.*) echo 'possibly a tar file' ;;
esac

위의 내용은 .tar이름 끝에 또는 .tar다른 확장자가 뒤에 올 수 있도록 허용합니다.

또는 bash(위의 내용은 다음을 sh포함한 모든 셸 에서 작동합니다 bash):

if [[ $filename =~ \.tar$  ]] ||
   [[ $filename =~ \.tar\. ]]; then
    echo 'possibly a tar file'
fi

또는,

if [[ $filename == *.tar   ]] ||
   [[ $filename == *.tar.* ]]; then
    echo 'possibly a tar file'
fi

파일에 긴 파일 이름 목록이 포함되어 있는 경우 다음 내용을 통해 파일 이름이 무엇인지 알 수 있습니다.파일의 줄.tar문자열 로 끝나 거나 다음 문자열을 포함합니다 .tar..

grep -E '\.tar$|\.tar\.' file.list

-E플래그는 grep주어진 패턴을 확장된 정규식(처리용 |)으로 처리하도록 지시합니다.

또는,

grep -e '\.tar$' -e '\.tar\.' file.list

목록결정적인긴 목록에 있는 각 파일의 확장자( 에 저장됨 file.list):

sed 's/.*\.//' file.list

sed표현식은 s/.*\.//마지막 지점까지 각 줄의 모든 내용을 삭제합니다.

관련 정보