ค้นหาและไฟล์ zip?


1
$ ls -lrt *.extract.sys 
-rw-r--r--   1 sftwrk01   test       1729455 Dec 01 21:21 ar.ARAB-PI_3.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1684929 Dec 30 21:21 ar.ARAB-PI_5.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1696332 Dec 30 21:21 ar.ARAB-PI_1.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1726197 Dec 30 21:21 ar.ARAB-PI_7.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1692531 Dec 03 21:21 ar.ARAB-PI_2.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1606737 Dec 30 21:21 ar.ARAB-PI_0.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1803846 Dec 30 21:21 ar.ARAB-PI_8.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1689816 Jan 30 21:21 ar.ARAB-PI_9.20101231.extract.sys
-rw-r--r--   1 sftwrk01   test       1724025 Jan 30 21:21 ar.ARAB-PI_6.20101231.extract.sys
....

ฉันต้องการ zip ไฟล์ในเดือนธันวาคม

จนถึงตอนนี้ฉันได้ลองด้านล่างแล้ว แต่ก็ไม่ได้

$ ls -lrt *.extract.sys | grep Dec | gzip            
gzip: compressed data not written to a terminal. Use -f to force compression.
For help, type: gzip -h

กรุณาช่วย

คำตอบ:


1

สมมติว่าคุณต้องการบีบอัดเนื้อหาไฟล์จริงไม่ใช่แค่รายชื่อคุณต้องสร้างไฟล์เก็บถาวร tar ก่อนบีบอัดด้วย GZip นอกจากนี้การใช้ find อาจมีความน่าเชื่อถือมากกว่า grepping ls output

ก่อนอื่นให้ทำเครื่องหมายไฟล์ด้วยวันที่ซึ่งแสดงถึงการเริ่มต้นและสิ้นสุดเดือนธันวาคมจากนั้นค้นหาไฟล์ทั้งหมดที่มีเวลาแก้ไขระหว่างสองไฟล์เหล่านั้นและใช้ xargs กับ tar เพื่อจัดทำแพ็กเกจแล้วส่งไปที่ GZip นี่คือวิธีการ:

  touch -t 201012010000 start
  touch -t 201101010000 end
  find . -iname \*.extract.sys -newer start \! -newer end -print0 | xargs -0 tar czvf dec.tar.gz
  rm start
  rm end

ตรวจสอบให้แน่ใจว่าไม่มีไฟล์สำคัญที่เรียกว่า "เริ่มต้น" และ "สิ้นสุด" ในไดเรกทอรี! หากเป็นเช่นนั้นให้ใช้ชื่ออื่นหรือวางไฟล์มาร์กเกอร์ไว้ใต้ / tmp

นอกจากนี้โปรดทราบว่าไดเรกทอรีย่อยใด ๆ ที่มีชื่อตรงกับ "* .extract.sys" จะถูกบีบอัดเช่นกัน หากไม่ต้องการให้เพิ่มแฟล็กเหล่านี้เพื่อค้นหา: -type f -depth 1


@jjrv: แนะนำให้คุณใช้-print0ในคำสั่ง find และ-0ในคำสั่ง xargs เพื่อจัดการช่องว่างในชื่อไฟล์อย่างถูกต้อง
Tom Shaw

@ Tom Shaw: ขอบคุณเพิ่ม OS X มี -X เพื่อจัดการกับสิ่งที่กำลังหลบหนี GNU พบว่าไม่ได้

@jjrv: วิธีการนี้จะล้มเหลวหากมีชื่อไฟล์มากเกินไปในกรณีที่ xargs จะรัน tar หลายครั้งและเขียนทับไฟล์เก็บถาวร แนวทางที่ดีกว่าคือการใช้ pax ซึ่งช่วยให้การทำงานของ cpio ในการอ่านชื่อไฟล์บน stdin
Tom Shaw

นี่คืออะไร \!
Munish

@munish: นั่นหมายความว่า "ไม่" คือ "ไม่ใหม่กว่า"
Tom Shaw

1

คุณพยายามบีบอัดชื่อไฟล์แทนไฟล์ อย่าส่ง gzip ชื่อของไฟล์ใน stdin ส่งเป็นอาร์กิวเมนต์


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