한 번에 두 개 이상의 파일을 압축 해제하려면 어떻게해야합니까?
tar
디렉토리에 많은 파일이 있고 한 번에 모든 파일을 추출하고 싶습니다. 그러나 이것은 아무것도하지 않는 것 같습니다.
$ tar xf *.tar
여기서 무슨 일이 일어나고 있습니까? 한 번에 여러 파일의 압축을 풀려면 어떻게합니까?
여기서 무슨 일이 일어나고 있습니까?
원래이 tar
명령은 자기 테이프 장치와 함께 사용하기위한 것입니다. tar
한 번에 하나의 장치 에서만 실행 하는 것이 합리적이기 때문에 구문은 단 하나의 장치 만 가정하도록 설계되었습니다. 전달 된 첫 번째 파일 또는 디렉토리는 해당 아카이브를 보유한 장치 및 아카이브의 내용이 작업에 포함될 기타 파일 또는 디렉토리로 가정되었습니다. 따라서 tar
추출 ( x
옵션)의 경우 전달되는 첫 번째 파일은 아카이브이고 다른 모든 파일은 추출 할 파일이됩니다. 따라서 두 개의 *.tar
파일 (예 : a.tar
및 b.tar
)이있는 경우 명령은 다음과 같이 확장됩니다.
$ tar xf a.tar b.tar
하지 않으면 a.tar
라는 이름의 파일이 포함 b.tar
의 tar
명령은 아무 상관이 조용히 종료합니다. 성가 시게도 Solaris 버전은 tar
반환 코드 나 자세한 옵션 ( v
) 에서 문제를보고하지 않습니다 . 한편, verbose 옵션이 꺼져 있어도 GNU tar
반환 2
및 스팸 STDERR
:
tar: b.tar: Not found in archive
tar: Exiting with failure status due to previous errors
한 번에 여러 파일의 압축을 풀려면 어떻게합니까?
tar
여러 아카이브 파일을 입력으로 받아들이 기에는 너무 늦게 다시 작성 했지만 제한을 해결하는 것은 그리 어렵지 않습니다.
대부분의 사람들 tar
에게 여러 아카이브에 대해 여러 번 실행 하는 것이 가장 편리한 옵션입니다. 하나의 파일 이름 만 전달하면 tar xf
예상대로 아카이브 된 모든 파일 이 추출됩니다. 한 가지 방법은 쉘 for
루프 를 사용하는 것입니다 .
$ for f in *.tar; do tar xf "$f"; done
또 다른 방법은 다음을 사용하는 것입니다 xargs
.
$ ls *.tar | xargs -i tar xf {}
또는 여러 대체 tar
파일 판독기 중 하나를 사용할 수 있습니다 . 마지막으로, 진정으로 헌신적 인 프로그래머는 tar
원하는대로 정확하게 작동 하는 대체물을 쉽게 작성할 수 있습니다 . 형식은 간단하며 많은 프로그래밍 언어를 읽을 수있는 도서관이 tar
파일을. 예를 들어, Perl 프로그래머라면 Archive::Tar
모듈을 살펴보십시오 .
경고
맹목적으로 파일 묶음을 풀면 예기치 않은 문제가 발생할 수 있습니다. 가장 명백한 것은 특정 파일 이름이 둘 이상의 tar
파일에 포함될 수 있다는 것 입니다. tar
기본적으로 파일을 덮어 쓰기 때문에 최종 파일의 정확한 버전은 아카이브가 처리되는 순서에 따라 달라집니다. 더 문제가되는 것은이 "영리한"최적화를 시도하면 파일의 손상된 사본이 될 수 있습니다.
for f in *.tar; do
tar xf "$f" &
done
wait
두 경우 a.tar
와는 b.tar
같은 파일을 포함하고 동시에 그것을 추출을 시도, 결과는 예측할 수 없습니다.
특히 신뢰할 수없는 출처에서 아카이브를 가져올 때 관련된 문제는 tarbomb 의 가능성입니다 .
한 가지 부분적인 해결책은 추출 할 새 디렉토리를 자동으로 생성하는 것입니다.
for f in *.tar; do
d=`basename "$f" .tar`
mkdir "$d"
(cd "$d" && tar xf "../$f")
done
파일이 절대 경로 (일반적으로 악의적 인 의도의 표시)로 아카이브에 지정된 경우에는 도움이되지 않습니다. 그런 종류의 확인을 추가하는 것은 독자를위한 연습으로 남겨집니다.
모든 tar 파일이 같은 폴더에 있으면 tcsh 셸에서이 작업을 수행합니다. 항상 작동합니다.
find -iname \*.tar -exec tar -xvf {} \;
이것은 위의 답변과 동일하며 조금 더 간결하다고 생각합니다.
find . -maxdepth 1 -name '*.tar' -exec tar -xf '{}' \;
참고 URL : https://stackoverflow.com/questions/583889/how-can-you-untar-more-than-one-file-at-a-time
'programing tip' 카테고리의 다른 글
HTML 4/5에서 JSF + Facelets를 사용할 수 있습니까? (0) | 2020.11.18 |
---|---|
파이썬에서 eval을 사용하여 변수의 값을 어떻게 할당 할 수 있습니까? (0) | 2020.11.18 |
전체 단어를 grep하는 방법 (0) | 2020.11.17 |
로컬 IIS를 통해 작동하도록 Windows 인증을 가져올 수 없습니다. (0) | 2020.11.17 |
jQuery : 부모, 부모 ID를 얻습니까? (0) | 2020.11.17 |