ในขณะที่พยายามแยกไฟล์ tar.gz ในเทอร์มินัลอูบุนตูมีข้อผิดพลาดเกิดขึ้นเขาประโยคสุดท้ายที่นี่คือ: tar: บล็อกเดียวที่ศูนย์ที่ 343398
อะไรคือทางออกสำหรับปัญหานี้?
ในขณะที่พยายามแยกไฟล์ tar.gz ในเทอร์มินัลอูบุนตูมีข้อผิดพลาดเกิดขึ้นเขาประโยคสุดท้ายที่นี่คือ: tar: บล็อกเดียวที่ศูนย์ที่ 343398
อะไรคือทางออกสำหรับปัญหานี้?
คำตอบ:
มันขึ้นอยู่กับว่ามันเกิดขึ้นกับtar.gzไฟล์ทั้งหมดหรือแค่อันนี้ ไฟล์นี้อาจเสียหายและไม่สามารถเปิดได้อย่างถูกต้อง หากมีการใช้สารสกัด tar เพื่อคุณจะต้องใช้zตัวเลือกที่เป็นที่จำเป็นเมื่อมีการเก็บเป็น tar xzvf <file.tar.gz>gzipped: อีกทางเลือกหนึ่งก็คือมันคุ้มค่าที่จะพยายามดึงมันออกมาgunzip <file.tar.gz>
หากต้องการค้นหาว่าไฟล์เสียหายหรือไม่ให้เรียกใช้gzip -t <file.tar.gz>; คำสั่งนี้จะตรวจสอบไฟล์เพื่อหาข้อผิดพลาดและหากพบว่ามีข้อผิดพลาดปรากฏขึ้นในเครื่อง สิ่งนี้ควรบอกคุณว่าไฟล์เสียหายหรือไม่
หากไฟล์นั้นเป็นเสียงและเกิดข้อผิดพลาดขึ้นแสดงว่าอาจเป็นปัญหาที่ทราบของ tar ซึ่งเกิดขึ้นเมื่อไฟล์ไม่มีคู่zero blocksที่ด้านท้ายของไฟล์ตามที่ GNU tar คาดไว้ วิธีการนี้คือการเพิ่มตัวเลือกที่จะไม่สนใจ-i zero blocksดังนั้นการใช้tar ixzvf <file.tar.gz>ปัญหามีการบันทึกรายละเอียดไว้ที่นี่
สิ่งเดียวกันได้เกิดขึ้นกับฉันเพราะฉันวางทั้ง stdout และ stderr ผ่านช่องทางที่ไม่แยก stderr และ stdout (เซสชันเทอร์มินัล adb ของ android)
ด้วยวิธีนี้บางข้อความผิดพลาดสิ้นสุดลงในกระแส นี่คือคำสั่งที่ผิดพลาด:
คำสั่งที่ผิดพลาด, adb เชลล์เพียงผสาน stderr และ stdout ในเครื่อง => ขยะ! :
adb shell tar -cf - /some/dir \| uuencode bla | uudecode -o - > backup.tar
คำสั่งคงที่:
adb shell tar -cf - /some/dir 2>/dev/null\| uuencode bla | uudecode -o - > backup.tar
สิ่งเดียวกันนี้จะเกิดขึ้นหากคุณทำคำสั่งคล้าย ๆ กันกับ SSH เช่น tar แบบรวดเร็วนี้จะทำการสตรีมผ่าน ssh หากคุณลืมเปลี่ยนเส้นทาง stderr ไปยัง / dev / null:
ssh user@host tar -czf /some/remote/path 2\>/dev/null > /local/path/to/file.tar.gz
ฉันได้รับข้อผิดพลาดนี้เมื่อวันก่อนพยายามยกเลิกการเก็บถาวรซึ่งไม่ได้ gzipped ฉันไม่ทราบแหล่งที่มาของไฟล์ แต่ฉันคิดว่าผู้สร้างอาจใช้catเพื่อรวมหลาย tars เป็นไฟล์เดียว สิ่งนี้ทำให้ตัวทำเครื่องหมายจุดสิ้นสุดของไฟล์ถูกอ่านโดยtarยูทิลิตี้ตรงกลางของไฟล์เก็บถาวรแบบรวมดังนั้นจึงแสดงข้อผิดพลาด "A lone zero block"
หากเป็นกรณีนี้--ignore-zerosหรือ-iตัวเลือกอาจช่วยระงับข้อผิดพลาดเหล่านี้ โปรดดูman tarหรือลิงค์นี้เป็นข้อมูลอ้างอิง
RequestTTY yesใน ssh_config ของคุณ สามารถปิดการใช้งานอย่างชัดเจนด้วย-T Disable pseudo-tty allocation.สำหรับฉันข้อผิดพลาดtar: Skipping to next headerเดิม แต่เดิมบล็อกศูนย์เดียวเกิดขึ้นเมื่อฉันพยายาม--posix..