น้ำมันดิน: หลีกเลี่ยงการเก็บถาวรไฟล์ที่มีขนาดใหญ่กว่าขนาดที่แน่นอน


11

ฉันต้องการเก็บไฟล์ (ที่มี tar) ซึ่งมีขนาดต่ำกว่า 3 MB แต่ฉันต้องการเก็บไดเรกทอรีที่มีไฟล์เหล่านั้นอยู่ด้วย (ดังนั้นฉันไม่สามารถใช้findคำสั่ง) ฉันแค่ต้องการหลีกเลี่ยงไฟล์ที่มีขนาดใหญ่กว่า 3 MB สิ่งนี้สามารถทำได้?


2
เหตุใดคุณจึงไม่สามารถใช้findอีกได้
Ignacio Vazquez-Abrams

คำสั่ง find สามารถเก็บไดเรกทอรีไว้เหมือนเดิมได้หรือไม่?
nixnotwin

คำตอบ:


23

ง่ายกว่าที่คุณคิด:

$ tar cf small-archive.tar /big/tree --exclude-from <(find /big/tree -size +3M)

ในบันทึกย่อกึ่งเกี่ยวข้อง (เกี่ยวข้องกับคำสั่งของคุณที่คุณไม่สามารถใช้ค้นหา) เพื่อรับรายชื่อของไฟล์ทั้งหมด (รวมถึงไดเรกทอรี) ภายใต้พา ธ ลบไฟล์ที่มีขนาดใหญ่กว่า 3MiB ให้ใช้:

$ find . -size -3M -o -type d

จากนั้นคุณสามารถทำได้:

$ tar cf small-archive.tar --no-recursion --files-from <(find /big/tree -size -3M -o -type d)

แต่ฉันต้องการคนแรกเพราะมันง่ายกว่าแสดงสิ่งที่คุณต้องการอย่างชัดเจนและจะนำไปสู่ความประหลาดใจน้อยลง


2
+1 อะไร! คนที่สุภาพและเป็นมิตรใน SF?!?
Jongosi

1
+1 ตะกอนเดียวกัน โทรล่่่อความเห็นแก่ตัวมากเกินไปใน SF
Patoshi パトシ

* ความรู้สึก: P :)
MikeyB

1

หากชื่อไฟล์มีเครื่องหมายวงเล็บเหลี่ยมในบางระบบต้องแยกออกอย่างชัดเจน ตัวอย่างเช่น

$ mkdir test
$ echo "abcde123456" > ./test/a[b].txt
$ echo "1" > ./test/a1.txt
$ ls -la ./test
total 16
drwxrwxr-x 2 user user 4096 Jan 10 16:38 .
drwx------ 4 user user 4096 Jan 10 16:38 ..
-rw-rw-r-- 1 user user    2 Jan 10 16:38 a1.txt
-rw-rw-r-- 1 user user   12 Jan 10 16:38 a[b].txt
$ tar -zcvpf a.tar.gz ./test
./test/
./test/a[b].txt
./test/a1.txt
$ tar -zcvpf a3.tar.gz ./test --exclude-from <(find ./test -type f -size +3c)
./test/
./test/a[b].txt
./test/a1.txt
$ tar -zcvpf ax.tar.gz ./test --exclude-from <(find ./test -type f -size +3c) --exclude '*\[*'
./test/
./test/a1.txt

0

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

find /path/to/dir -type f -size -3M | xargs tar cf archive.tar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.