ทำไมไฟล์ tar.gz ของฉันเสียหลังจากใช้ bash ftp เพื่อย้ายไฟล์ไปยังเซิร์ฟเวอร์ระยะไกล


4

ฉันสำรองไฟล์ tar.gz บนเซิร์ฟเวอร์ภายในจากนั้น ftp ไปยังเซิร์ฟเวอร์ระยะไกล ถ้าฉันดึงมันไปยังเดสก์ท็อปของฉันผ่านไคลเอนต์ ftp จากเซิร์ฟเวอร์ภายในไฟล์จะทำงานได้ดี ถ้าฉันดึงมันไปยังเดสก์ท็อปของฉันผ่านไคลเอนต์ ftp จากเซิร์ฟเวอร์ระยะไกลมันมีขนาดเล็กลงเล็กน้อยและเสียหาย ฉันได้ลองใช้ไคลเอนต์เพื่อบังคับ ascii และโหมดไบนารีและไม่ทำให้ไฟล์เสียหายดังนั้นฉันจึงไม่เห็นสาเหตุที่ทำให้เกิดความเสียหายในสคริปต์ ความคิดใด ๆ การถ่ายโอนไฟล์ดีมันเพิ่งจะไม่เปิด ขอบคุณล่วงหน้า.

cd $FSBACKDIR
ATTACH='for file in *$DATE.tar.gz; do echo -n -e "put ${file}\n"; done'
ftp -nv <<EOF
open $FTPHOST
user $FTPUSER $FTPPASS
cd $FTPDIR
$ATTACH
quit
EOF

คำตอบ:


11

สำหรับฉันดูเหมือนว่ายังคงเป็นปัญหาของโหมด ASCII กับไบนารีแม้ว่าจะมีการทดสอบที่คุณทำกับไคลเอ็นต์เดสก์ท็อปของคุณก็ตาม เดสก์ท็อปไคลเอนต์ของคุณอาจฉลาดกว่าไคลเอนต์บรรทัดคำสั่ง FTP บนเซิร์ฟเวอร์ที่ส่ง (เซิร์ฟเวอร์ภายในเครื่องที่คุณใช้งานสคริปต์)

ตัวอย่างเช่นหากเซิร์ฟเวอร์ภายในเครื่องเป็น Windows (ซึ่งใช้ CRLF เป็นบรรทัดสิ้นสุด) และเซิร์ฟเวอร์ระยะไกลคือ Unix (ซึ่งใช้เพียง LFs เป็นการสิ้นสุดบรรทัด) และคุณไม่ได้ระบุโหมดไบนารีและซอฟต์แวร์ FTP ของคุณไม่ทำงานโดยอัตโนมัติ ตรวจสอบและทำสิ่งที่ถูกต้องจากนั้นคุณจะใช้โหมด ASCII สำหรับการถ่ายโอนซึ่งควรตัด CRs ออกจากคู่ CRLF ใด ๆ หาก tarball gzipped ของคุณมีรูปแบบไบต์ 0x0d0a ปรากฏขึ้นที่ใดก็ได้มันจะเสีย 0x0d

หากไคลเอนต์บรรทัดคำสั่ง FTP ในระบบการส่งของคุณ (ฉันเดาว่าเป็นเซิร์ฟเวอร์ในพื้นที่ของคุณ) เป็นสิ่งที่เหมือนหนึ่งในระบบของฉันสิ่งที่คุณต้องทำเพื่อทดสอบทฤษฎีนี้คือการเพิ่ม binaryคำสั่งก่อนหรือหลังcdบรรทัด:

cd $FSBACKDIR  
ATTACH='for file in *$DATE.tar.gz; do echo -n -e "put ${file}\n"; done'  
ftp -nv <<EOF  
open $FTPHOST  
user $FTPUSER $FTPPASS  
binary  
cd $FTPDIR  
$ATTACH  
quit  
EOF  

ความคิดสุดท้าย: ถ้าไม่ใช่ ASCII เทียบกับโหมดไบนารีหลังจากทั้งหมดฉันจะดูว่า FTP ALG ใน NAT เกตเวย์ระหว่างเซิร์ฟเวอร์ในพื้นที่และเซิร์ฟเวอร์ระยะไกลของคุณหรือไม่ (หรือระหว่างเซิร์ฟเวอร์ระยะไกลและเดสก์ท็อปของคุณ) เป็นไฟล์ กำลังขนส่ง ฉันคิดว่าอาจเป็นพร็อกซีชนิดอื่นในระหว่างโฮสต์ไม่ใช่ FTP ALG ของ NAT เกตเวย์โดยเฉพาะ


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