내 시스템의 모든 tar 아카이브를 파악하기 위해 'find' 및 -exec 'tar'를 어떻게 사용합니까?

내 시스템의 모든 tar 아카이브를 파악하기 위해 'find' 및 -exec 'tar'를 어떻게 사용합니까?

내가 시도하는 명령은 ("butterflyinmotion.com"을 디렉터리로 사용하여 tar를 찾으려고 하기 때문에) 다음과 같습니다.

find / -name "*.tar.gz" -exec tar -tzf {} \; | grep -W butterflyinmotion

이것은 많은 오류를 표시하고 작동하지 않습니다. grep -W는 Butterflyinmotion.com이 어떤 파일에 백업되었는지 알기 위해 필요합니다. 감사해요!

답변1

작은 스크립트를 만들어서 사용하는 것 같아요 find -exec.

예를 들어:

#!/bin/sh
에코 >>> $1”
타르 tvf"$1"

-exec ./script.sh "{}" \;를 사용하여 호출하고 결과를 파일로 리디렉션한 다음 해당 파일을 grep합니다.egrep '>>>|WhatYouLookFor' file

스크립트에서 grep을 사용할 수도 있습니다.

#!/bin/sh
에코 >>> $1”
tar tvf "$1" grep '무엇을 찾고 계십니까?'

또는 더 유연하게:

#!/bin/sh
에코 >>> $2”
tar tvf "$2" 찾기 "$1" |

-exec ./script.sh 'WhatYouLookFor' "{}" \;를 사용하여 호출하세요.

답변2

최소한 GNU grep을 사용하면 다음과 같은 작업을 수행할 수 있습니다.

find / -name '*.tar.gz' -exec sh -c '
  for t; do 
    tar -tvf "$t" | grep -m1 -l --label="$t" "butterflyinmotion"
  done
' {} + 2>/dev/null

.tar.gz그러면 아카이브에 패턴과 일치하는 항목이 하나 이상 포함된 파일 이름이 출력됩니다.butterflyinmotion


GNU tar를 사용하면 (적어도 단순 모드에서는) grep을 생략하고 tar -tfex의 종료 상태를 직접 사용하는 것이 가능해 보입니다.

find / -name '*.tar.gz' -exec tar --wildcards -tf {} '*butterflyinmotion' \; -print 2>/dev/null

위의 명령은 일치하는 파일(있는 경우)과 그 뒤에 아카이브 이름을 인쇄합니다.

관련 정보