tar.gz 전체에서 파일 검색

tar.gz 전체에서 파일 검색

나는 임의의 위치에 많은 tar.gz 파일을 가지고 있으며 모든 tar.gz 파일 내에서 파일을 찾고 싶습니다.

예를 들어 :

/root/a.tar.gz
/home/backup-2016.tar.gz
/home2/user/files/2015/abc.tar.gz

내가 찾고 있어요파일또는폴더그들 안에

답변1

이 (다소 긴) 한 줄을 사용하여 PATTERN검색 패턴으로 바꿀 수 있습니다( -i다음 옵션을 제거하지 않는 한 대소문자를 구분하지 않음 grep).

find / -iname "*.tar.gz" -exec bash -c 'result=$(set -o pipefail ; echo "{}" ; tar -tf {} | grep -i "PATTERN" | sed "s/^/    /") ; test $? -eq 0 && printf "$result\n"' \;

전체 컴퓨터를 검색하지 않고 특정 디렉터리만 (재귀적으로) 검색 find하려면 /. 처리할 아카이브의 접미사 는 이후를 로 .tar.gz바꾸지 않는 한 대소문자를 구분하지 않습니다 .-inamefindname

출력은 다음과 같을 수 있습니다( /usr/share/doc패턴 검색 default).

/usr/share/doc/openjdk-8-jre-headless/test-amd64/failed_tests-hotspot.tar.gz
    test/langtools/JTwork/tools/javac/lambda/methodReferenceExecution/MethodReferenceTestInnerDefault.jtr
    test/langtools/JTwork/tools/javac/lambda/methodReferenceExecution/MethodReferenceTestSuperDefault.jtr
    test/langtools/JTwork/tools/javac/lambda/methodReferenceExecution/MethodReferenceTestVarArgsSuperDefault.jtr
    test/langtools/JTwork/tools/javac/lambdaShapes/org/openjdk/tests/vm/DefaultMethodsTest.jtr
/usr/share/doc/apg/php.tar.gz
    ./themes/default.php

한 줄에 아카이브 경로가 표시되고 패턴과 일치하는 모든 콘텐츠 항목이 각각 4개의 공백으로 들여쓰기된 별도의 줄에 표시됩니다.


이는 스크립트에 넣을 수도 있습니다(예 archive-search: 를 사용하여 실행 가능하게 만드는 것을 잊지 마세요 chmod +x FILENAME).

#!/bin/bash
# Usage:   archive-search PATTERN DIRECTORY

find "$2" -iname "*.tar.gz" -exec bash -c '
        result=$(
                set -o pipefail
                echo "{}"
                tar -tf {} | grep -i "$0" | sed "s/^/    /"
        )
        test $? -eq 0 && printf "$result\n"
' "$1" \;

또는 Bash 기능에서 (예 : 모든 새로운 Bash 세션에서 사용할 수 있도록 하려면 archive-searchyour 에 추가하세요 ):~/.bashrc

archive-search () {
    # Usage:   archive-search PATTERN DIRECTORY

    find "$2" -iname "*.tar.gz" -exec bash -c '
            result=$(
                    set -o pipefail
                    echo "{}"
                    tar -tf {} | grep -i "$0" | sed "s/^/    /"
            )
            test $? -eq 0 && printf "$result\n"
    ' "$1" \;
}

스크립트와 함수 모두 다음과 같이 검색 패턴과 디렉터리를 명령줄 인수로 사용합니다.

archive-search "default" /usr/share/doc

관련 정보