ไฟล์รายการ tar เท่านั้น


16

สนุกจริง: ถ้าคุณใช้จัดการที่เก็บข้อมูลและสารสกัดจาก .tar.gz เพื่อให้คุณมี "โครงสร้างไดเรกทอรี Keep" unticked, คุณจะได้รับtarbomb

tar -ztfแสดงรายการไฟล์และไดเรกทอรีทั้งหมดในไฟล์ tar มีวิธีการแสดงรายการไฟล์ทั้งหมดในไฟล์ tar โดยไม่มีโครงสร้างไดเรกทอรีหรือไม่?


คุณจะได้รับ 'tarbomb' tar xvzf my_tar.tar.gz --transform 's/.*\///'ผลกระทบกับ แต่น่าเสียดายที่ไม่เปลี่ยนวิธีการที่จะแสดงในรายการที่มีมากกว่าt x
ire_and_curses

4
สิ่งที่รบกวนจิตใจฉันคือแม้แต่คลังเก็บที่มีโครงสร้างที่ดีก็ยังสามารถใช้สร้างอาวุธสกัดขนาดใหญ่ได้อย่างง่ายดาย
Eero Aaltonen

คำตอบ:


17

ฉันไม่เห็นวิธีที่จะทำจาก man page แต่คุณสามารถกรองผลลัพธ์ได้ตลอดเวลา ข้อมูลต่อไปนี้จะไม่ขึ้นบรรทัดใหม่ในชื่อไฟล์ของคุณ:

tar tzf your_archive | awk -F/ '{ if($NF != "") print $NF }'

มันทำงานอย่างไร

ด้วยการตั้งค่าตัวคั่นฟิลด์เป็นฟิลด์/สุดท้ายจะawkรู้เกี่ยวกับ ( $NF) เป็นชื่อไฟล์หากกำลังประมวลผลชื่อไฟล์หรือว่างเปล่าหากกำลังประมวลผลชื่อไดเรกทอรี ( tarเพิ่มเครื่องหมายสแลชต่อท้ายเป็นชื่อไดเรกทอรี) ดังนั้นโดยทั่วไปเราจะบอกawkให้พิมพ์ฟิลด์สุดท้ายหากไม่ว่างเปล่า


การทำงานที่ดีงามกับ awk :)
Eero Aaltonen

5

ใช้โจเซฟอาร์ของข้อเสนอแนะหนึ่งสามารถใช้ regex ไม่[^/]$ไปสำหรับไฟล์โดยการมองหาเส้นไม่ได้ลงท้ายด้วยgrep/

tar tzf archive.tar.gz | grep -e "[^/]$"


ที่ยังคงเอาท์พุทเป็นนอกคอกเพียงfoo/bar barคุณต้องการgrep -Eo '[^/]+$'(กับ GNU grep)
Stéphane Chazelas

4

สมมติว่าไม่มีชื่อไฟล์ใดที่มีการขึ้นบรรทัดใหม่:

tar -tf foo.tar | sed -e 's#.*/##' -e '\#.#!d'

คำสั่ง sed แรกจะลบทุกอย่างก่อนที่/บรรทัดสุดท้ายจะพิมพ์เฉพาะส่วนของชื่อไฟล์ คำสั่งที่สองจะลบบรรทัดที่ตอนนี้ว่างเปล่านั่นคือบรรทัดที่ลงท้ายด้วย a /ซึ่งเป็นไดเร็กทอรี


sed: -e expression # 2, ถ่าน 2: คำสั่งที่ไม่รู้จัก: `/ 'และไวยากรณ์ sed ไม่รู้สึกมาก .. ใช้งานง่าย
Eero Aaltonen

@EeroAaltonen ฉันแก้ไขคำสั่ง sed แท้จริงแล้วไวยากรณ์นั้นค่อนข้างคลุมเครือ (ฉันมีคำอธิบายในคำตอบของฉันด้วย)
Gilles 'หยุดความชั่วร้าย'

2

ด้วยpax(คำสั่ง POSIX เพื่ออ่านtarไฟล์):

pax -'s@.*/@@' < file.tar

(ที่แสดงรายการไฟล์ทั้งหมดโดยไม่คำนึงถึงประเภทรวมถึงไดเรกทอรี)

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