원격 시스템의 디렉토리를 사용하여 tar 파일을 만들었습니다.
tar -czvf
압축을 풀고 싶은 로컬 컴퓨터로 scp합니다.
tar -xzvf
하지만 나는 다음을 얻습니다.Cannot open: File name too long
내 lubuntu 12.04 로컬 머신에는 다음이 있습니다 tar (GNU tar) 1.26
.
이제 원격 시스템에 액세스할 수 없습니다. 필요한 경우 버전을 확인하겠습니다.
특히 원격 시스템이 오프라인이기 때문에 새로운 tar를 만들지 않고 추출하고 싶습니다.
그런데 이름이 길더라도 제대로 된 아카이브를 만드는 방법을 알고 계시다면 수락하겠습니다.
답변1
tar
파일 이름을 256바이트(GNU 확장자 포함)로 제한하세요. Linux 파일 시스템은 파일 이름당 최소 256바이트를 지원합니다. 이는 압축된 파일을 tar
오류 없이 추출할 수 있음을 의미합니다. 그래서 저는 두 가지 이유가 있다고 생각합니다.
타르볼이 손상되었습니다. 다음을 통해 확인하십시오.
$ tar -tvf tarball.tar
어떤 경우에는 몇 가지 오류가 표시됩니다.
"가상" 파일 시스템을 사용합니다.퓨즈 압축또는암호화된 파일 시스템(선택적 파일 압축/암호화 사용) 파일 이름이 약간 짧거나 파일 시스템 제한과 같습니다. 트릭은 예를 들어 퓨즈 압축을 사용하여 디렉토리를 마운트하고 파일 이름을 생성할 때
foo.bar
가상 파일 시스템이 이름이 지정된 파일을 생성foo.bar.gz
하고 투명하게 압축하지만 실제 파일 이름은 숨긴다는 것입니다. 이름 길이가 254바이트인 파일을 생성하면 파일에 접미사를 추가하려고 하기 때문에 오류가 발생합니다.이 경우 가상 파일 시스템 외부에서 tarball을 추출하면 도움이 됩니다.
$ sudo mkdir /home/${USER}-temp $ sudo chown $USER /home/${USER}-temp $ tar -xvf tarball.tar -C /home/${USER}-temp
어쨌든 자세한 내용을 보려면 추적해 보세요.
$ strace -o tar-strace.log tar -tf tarball.tar
$ ltrace -o tar-ltrace.log tar -tf tarball.tar
답변2
이것이 파일 저장에 대한 해결 방법입니다. tar를 추출할 때 다음 옵션을 추가하십시오.
- --xform'을 사용하세요./sed/표현/' 긴 이름을 줄여서 표현합니다.
- -T를 사용하세요.파일 이름 목록모든 아카이브 대신 문제가 있는 파일만 추출합니다.
예:
긴 파일 이름을 /tmp/missing.txt에 넣는 것부터 시작하세요.
tar -x -T /tmp/missing.txt --xform 's/Beethoven-.*\.flac/B.flac/g' -f backup/home.tar
내 경우에는 문제의 모든 파일에 메타 정보가 포함된 트랙 번호가 매겨져 있으므로 일부 이름을 잘라내는 것은 문제가 되지 않는 것 같습니다. 원본 파일 이름을 복원하는 방법을 찾아야 할 수도 있습니다.