2017-11-13 1 views
0

filename*.tar.gz 목록에서 file1.txt이있는 tar 파일 이름을 확인해야합니다. 이 지침을 어떻게 개선 할 수 있습니까? 당신이 패턴 "은 File2.txt을"일치하는 tar의 항목을 인쇄합니다 지금까지 가지고 있지만,이 항목이 포함 된 tar 파일 자체의 이름이 인쇄되지 않습니다 무엇특정 파일이 들어있는 tar 목록과 tar 파일을 순환하십시오.

for file in filename*.tar.gz; do tar -ztvf "$file" | grep 'file1.txt' ;done 

답변

1

. 당신이 file1.txt 들어있는 tar 파일의 이름을 인쇄하려면

,이 같은 조건문을 사용할 수 있습니다

for file in filename*.tar.gz; do 
    if tar ztf "$file" | grep -q file1.txt; then 
     echo "$file" 
    fi 
done 

여기 조건은 grep의 종료 코드입니다. 패턴이 발견되면 grep은 0으로 종료됩니다. 이는 성공을 의미하며 echo "$file"이 실행됩니다.

또한 내가 조용한grep-q 플래그를 추가 있습니다, 그것은 기본적으로 마찬가지로, 일치하는 라인을 인쇄되지 않습니다. 이 플래그를 사용하면 grep이 아무 것도 출력하지 않습니다. 조건문을 결정하기 위해 종료 코드 만 있으면됩니다.

더 컴팩트 해당 :

for file in filename*.tar.gz; do 
    tar ztf "$file" | grep -q file1.txt && echo "$file" 
done 
관련 문제