ดาวน์โหลดไฟล์ที่มีชื่อจริงโดย wget


9

ฉันพยายามที่จะดาวน์โหลดไฟล์ผ่าน HTTP wgetจากเว็บไซต์โดยใช้

เมื่อฉันใช้:

wget http://abc/geo/download/?acc=GSE48191&format=file

index.html?acc=GSE48191ฉันจะได้รับเฉพาะไฟล์ที่เรียกว่า

เมื่อฉันใช้:

wget http://abc/geo/download/?acc=GSE48191&format=file -o asd.rpm

ฉันได้รับasd.rpmแต่ฉันต้องการดาวน์โหลดด้วยชื่อจริงและไม่ต้องการเปลี่ยนชื่อของไฟล์ที่ดาวน์โหลดด้วยตนเอง


คุณอาจต้องการถามคำถามประเภทนี้เกี่ยวกับชีวสารสนเทศศาสตร์ในครั้งต่อไป มันอยู่ในหัวข้อที่นี่เช่นกันและยินดีต้อนรับที่จะอยู่ แต่คุณอาจได้รับความช่วยเหลือเพิ่มเติมจากคนที่ทำงานในสาขา
terdon

3
@terdon ถามเกี่ยวกับพฤติกรรม wget และ * nix shell ในหัวข้อBioinformaticsอย่างไร
CVn

1
@ MichaelKjörlingการดึงข้อมูลจาก NCBI นั้นเป็นเหตุผลที่ฉันแนะนำ คำตอบที่นั่นน่าจะเกี่ยวข้องกับวิธีที่ง่ายกว่าและตรงกว่ามากขึ้นในการรับข้อมูลที่ OP กำลังมองหาแทนที่จะเป็นโซลูชันเชลล์ ตัวอย่างเช่น "คุณสามารถรับข้อมูลนี้ได้ง่ายขึ้นจากที่นี่" ตัวอย่างเช่น
terdon

ดู--trust-server-namesอาร์กิวเมนต์ของwget-
ivanivan

3
สิ่งสำคัญคือให้สังเกตว่าไม่มีสิ่งเช่น "ชื่อจริง" ของทรัพยากรที่อ้างอิงโดย URL เว็บเซิร์ฟเวอร์ตอบสนองต่อคำขอที่มีเนื้อหาบางส่วนและอาจเป็นหัวข้อที่อธิบายเนื้อหานั้นในบางกรณี แต่ไม่จำเป็นต้องมีไฟล์ที่เกี่ยวข้องเลย
IMSoP

คำตอบ:


30
wget --content-disposition 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'

ไฟล์ที่คุณกำลังดาวน์โหลดเป็นtarไฟล์เก็บถาวร (ไฟล์ไบนารี) ซึ่งจัดทำโดยลิงก์แบบไดนามิกจากเว็บเซิร์ฟเวอร์ wgetโดยปกติจะบันทึกไฟล์โดยใช้ส่วนหนึ่งของ URL ที่คุณใช้ แต่ในกรณีนี้เป็นเพียงจุดสิ้นสุด REST API (หรือบางอย่างที่คล้ายกัน) ดังนั้นชื่อจะไม่เป็นมิตรกับการทำงานด้วย (มันจะเป็นชื่อที่ถูกต้องและ เนื้อหาของไฟล์จะเหมือนกัน)

อย่างไรก็ตามในกรณีนี้เซิร์ฟเวอร์ให้ส่วนหัว "การจัดการเนื้อหา" ที่มีชื่อไฟล์จริงซึ่งwgetสามารถใช้งานได้หากคุณใช้--content-dispositionตัวเลือก ตัวเลือกนี้จะมีการทำเครื่องหมาย "ทดลอง" wgetในคู่มือของฉัน

คุณต้องอ้าง URL เพื่อที่เชลล์จะไม่ตีความ&และ?อักขระในนั้น


สิ่งที่เทียบเท่าโดยใช้curl:

curl -J -O 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'

หรือใช้ตัวเลือกแบบยาวที่เทียบเท่า:

 curl --remote-header-name --remote-name 'https://www.ncbi.nlm.nih.gov/geo/download/?acc=GSE48191&format=file'

เมื่อคุณดาวน์โหลดไฟล์แล้วคุณจะต้องแตกไฟล์ออก:

tar -xvf GSE48191_RAW.tar

เนื่องจากวิธีที่สร้างไฟล์เก็บถาวรเฉพาะนี้จะทำให้ไฟล์ของไฟล์เก็บถาวรลงในไดเรกทอรีปัจจุบัน (ดังนั้นการสร้างไดเรกทอรีใหม่ย้ายไฟล์เก็บถาวรไปที่นั่นและเปิดออกอาจเป็นความคิดที่ดี) ไฟล์ในไฟล์เก็บถาวรนี้เป็นไฟล์ที่gzipบีบอัดCEL


8

เชลล์ทำการตีความตัวละครตามปกติโดยเฉพาะอย่างยิ่ง?สัญลักษณ์แทน (ซึ่งไม่สำคัญที่นี่) และ&เป็น "ใส่ลงในพื้นหลัง" คุณควรสังเกตหลังเพราะการตอบสนองของเชลล์แตกต่างจากคำสั่งโดยตรง

ดังนั้นคุณต้องพูด:

wget 'http://abc/geo/download/?acc=GSE48191&format=file'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.