tar ออกจาก“ ไม่สามารถสถิติ: ไม่มีไฟล์ของไดเรกทอรี” ทำไม?


50

ฉันกำลังพยายามสร้างไฟล์ tar.gz โดยใช้คำสั่งต่อไปนี้:

sudo tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/

จากนั้นเริ่มสร้างไฟล์ (หลายไฟล์ในโฟลเดอร์) แต่ฉันได้รับข้อผิดพลาดดังต่อไปนี้:

tar: dvr_rdk_v1.tar.gz: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

ฉันไม่เห็นคำอธิบายของข้อผิดพลาดนี้หมายความว่าอย่างไร

คำตอบ:


61

ลบออก-จากvcfzตัวเลือก tarไม่จำเป็นต้องใช้เครื่องหมายขีดคั่นสำหรับตัวเลือก

ด้วยยัติภังค์อาร์กิวเมนต์สำหรับตัวเลือก-f zดังนั้นคำสั่งมีผลการพยายามที่จะเก็บdvr_rdk_v1.tar.gzและไปยังที่เก็บที่เรียกว่าdvr_rdk zหากไม่มีเครื่องหมายยัติภังค์ความหมายของตัวเลือกจะเปลี่ยนไปดังนั้นอาร์กิวเมนต์ถัดไปในบรรทัดคำสั่งเช่นชื่อไฟล์ของไฟล์เก็บถาวรของคุณจะกลายเป็นอาร์กิวเมนต์ของfแฟล็ก

ตรวจสอบสิทธิ์การเขียนของคุณไปยังไดเร็กทอรีที่คุณกำลังเรียกใช้งานคำสั่ง


6
ไม่ต้องการยัติภังค์ แต่พวกเขาไม่ควรมีปัญหาพวกเขาเป็นตัวเลือก
Michael Mrozek

18
@MichaelMrozek ที่จริงแล้วการลบออก-จะสร้างความแตกต่างเนื่องจาก GNU tar นั้นแปลก ข้อโต้แย้งทางเลือกที่ไม่สามารถนำมารวมไว้ในอาร์กิวเมนต์แรกเมื่อมันไม่ได้เริ่มต้นด้วย-ดังนั้นการโต้แย้งที่จะfเป็นอาร์กิวเมนต์ที่ติดกับtarและเพื่อให้เทียบเท่ากับtar vcfz dvr_rdk_v1.tar.gz tar -v -c -f dvr_rdk_v1.tar.gz -z
Gilles 'หยุดชั่วร้าย'

1
ฉันก็ตระหนักว่าถ้าฉันลบzหรือjการบีบอัดไฟล์เก็บถาวรก็ประสบความสำเร็จแม้จะ-เกี่ยวข้อง เมื่อฉันเพิ่มเครื่องหมายยัติภังค์รวมอยู่ด้วยถือว่าอักขระตัวสุดท้ายในตัวเลือกเป็น "ไฟล์" ดังนั้นผลที่ตามมาฉันได้รับjหรือzเป็นไฟล์ที่เก็บไว้ถ้าผมใช้ตัวเลือกนี้หรือ-cvfz -cvfj
JohnnyQ

9
สรุป:หาก 'f' เกิดขึ้นเป็นตัวเลือกอื่นใดนอกจากตัวเลือกสุดท้ายคำสั่งจะไม่ทำตามที่ตั้งใจไว้ ฉันไม่เห็นว่า Gnu ไม่สามารถเพิ่มคำเตือนเมื่อตรวจพบปัญหาร้ายแรงและตรวจจับได้ง่าย ฉันใช้เวลา 40 นาทีในการพยายามแก้ไขข้อผิดพลาดนี้ สิ่งนี้ต้องเสียเวลาทำงานหลายแสนชั่วโมง
smci

57

-fตัวเลือกโดยตรงควรนำหน้าชื่อไฟล์ ดังนั้นใช้tar -vczf filename.tar.gzแทน-vcfz


อ่าสิ่งนี้อธิบายว่าทำไมคำสั่งที่ฉันใช้พยายามสร้างไฟล์เก็บถาวรที่บีบอัดชื่อjหรือzด้วยคำสั่งเหล่านี้-cvfjและ -cvfzตามลำดับ
JohnnyQ

17

คำสั่ง tarในอดีตได้รับหนึ่งในไม่กี่คำสั่งที่ไม่เป็นไปตามระบบปฏิบัติการยูนิกซ์แนวทางไวยากรณ์ยูทิลิตี้

หน้ามาตรฐานสำหรับ tar พูดว่า:

f
ใช้ตัวถูกดำเนินการไฟล์แรก (หรือตัวที่สองถ้า b ถูกระบุไว้แล้ว) เป็นชื่อของไฟล์เก็บถาวรแทนค่าเริ่มต้นขึ้นอยู่กับระบบ

ในขณะที่แนวทางไวยากรณ์รวมถึงสิ่งนี้:

หลักเกณฑ์ 5:
ตัวเลือกหนึ่งตัวเลือกหรือมากกว่าโดยไม่มีตัวเลือกอาร์กิวเมนต์และตามด้วยตัวเลือกอย่างน้อยหนึ่งตัวที่ใช้ตัวเลือกอาร์กิวเมนต์ควรได้รับการยอมรับเมื่อจัดกลุ่มหลัง '-' ตัวคั่นหนึ่งตัว

ดังนั้นในขณะที่คำสั่งที่คุณพิมพ์tar -vcfz dvr_rdk_v1.tar.gz dvr_rdk/จะถูกปรับในรุ่นเก่าของน้ำมันบางรุ่นของน้ำมันดินที่เขียนขึ้นเพื่อปฏิบัติตามอย่างเคร่งครัดยูทิลิตี้แนวทางไวยากรณ์จะแยกนี้จะหมายความว่า "ใช้zเป็นอาร์กิวเมนต์ไฟล์ไปยัง-f" ดังนั้นคุณควรใช้สิ่งต่อไปนี้เป็นแบบพกพา:

tar -cvzf dvr_rdk_v1.tar.gz dvr_rdk/

-1

เพื่อสร้างไฟล์เก็บถาวร

$ tar -cvf music.tar Music/

นี่คือรายการของไฟล์และโฟลเดอร์

$ tar -tvf music.tar         

และทำการสกัดอีกครั้ง

$ tar -xvf music.tar         

นี่ไม่ได้อธิบายข้อผิดพลาดของเขาใช่ไหม? tarนี้เป็นเพียงการอธิบายการใช้งานของ
Bernhard

1
@Bernhard ดีข้อผิดพลาดของเขาคือเขาใช้tarผิดแม้ว่าอย่างน้อยก็พูดถึงความแตกต่างที่สำคัญ (ย้าย-fไปยังจุดสิ้นสุด)
Michael Mrozek

2
@MichaelMrozek เอาล่ะเขาค่อนข้างจะทิ้งสิ่งที่zดีกว่าfในตอนท้ายดังนั้นความคิดเห็นของฉัน
Bernhard

คำสั่งนี้ใช้งานได้กับ Ubuntu, มันจะประสบความสำเร็จ
dhamu

ตกลง! ขอโทษฉันไม่ได้ฟังคำถามของคุณ แต่คำสั่งทำงานกับอูบุนตู
dhamu
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.