2017-04-07 1 views
0

파일을 추출하지 않고 tar 아카이브에서 디렉토리 구조 만 추출 할 수 있습니까? 디렉토리 구조 만 untar로

나는

tar tvpf archive.tar | nawk '/.*\/$/{ print $NF }' | tar -xpf archive.tar --no-recursion -T - 

모든 디렉토리가 후행/함께 표시됩니다를 사용했습니다. 따라서 nawk에서는 줄 끝 부분에있는 것들만 인쇄합니다. 문제는 tar -T가 라인별로 분리 된 경로 이름을 허용하지 않는다는 것입니다. 다른 공백 문자는 파일 이름을 분리하므로 공백이있는 파스 (pathes)에서는 작동하지 않습니다. 어떤 생각?

파일을 모두 압축 해제 한 다음 파일을 제거한 다음 가능하면 대상에 디렉토리를 tar 복사하는 해결책은 아닙니다. 임시 파일없이 솔루션을 만들고 싶습니다. bash 솔루션이 도움이 될 것입니다.

답변

1

예전에 비슷한 질문을 한 적이 있습니다.

tar -tf file.tar | grep -v '/$' | sed 's/ /\\ /g' > excluded_files ; tar xfX file.tar excluded_files ; rm -f excluded_files 

첫 번째 부분은 파일 이름을 잡아 grep을 출력 배관, 타르에 보이는, 이들은 임시 파일로 전송됩니다. 그런 다음 제외 된 파일을 제외하고 타르를 추출하고 마지막으로 임시 파일을 제거하십시오.

편집 : 경로의 이스케이프 공간을 제거하는 sed가 추가되었습니다.

코멘트에 제안으로 업데이트

, 이것은 또한없는 임시 파일 및 프로세스 대체와 acheivable입니다. 건배 Walter A. 훨씬 더 청결한. 당신이 C 코드의 비트를 사용할 수있는 경우

tar xfX file.tar <(tar -tf file.tar | grep -v '/$' | sed 's/ /\\ /g') 
+1

당신은 프로세스 대체와 임시 파일을 방지 할 수 있습니다 '타르 XFX의 file.tar을 <(타르 -tf file.tar | 그렙 -v '/ $'| 나오지도의// \\/g ')' –

+0

@WalterA 좋은 캐치, 편집으로 추가하겠습니다. – benjamin