คุณสามารถใช้find
เพื่อรับรายการไฟล์และดำเนินการzip -j myfiles
เพื่อแพ็คไฟล์โดยไม่สนใจพา ธ :
find . -name "d[014]" -exec zip -j myfiles {} +
ตัวอย่าง
$ tree
.
├── d0
├── f0
├── f1
│ └── d1
└── f2
└── f3
├── d2
├── d3
└── d4
$ find . -name "d[014]" -exec zip -j myfiles {} +
adding: d1 (stored 0%)
adding: d4 (stored 0%)
adding: d0 (stored 0%)
$ unzip -l myfiles.zip
Archive: myfiles.zip
Length Date Time Name
--------- ---------- ----- ----
0 2017-10-09 10:47 d1
0 2017-10-09 10:48 d4
0 2017-10-09 10:47 d0
--------- -------
0 3 files
อย่างไรก็ตามเรื่องนี้ทำงานให้เฉพาะไฟล์zip -j
ไดเรกทอรีจะได้รับการปฏิเสธโดย ที่จะได้รับการทำงานนี้ไดเรกทอรีเกินไปบอกว่าเราต้องการที่จะแพ็คd0
, d1
และทั้งf3
ไดเรกทอรีในตัวอย่างข้างต้นfind
สายได้รับเพียงเล็กน้อยที่ซับซ้อนมากขึ้น:
$ find . \( -name "d[01]" -o -name "f3" \) -exec sh -c 'p=$(pwd); for i in $0 $@; do cd ${i%/*}; zip -ur "$p"/myfiles ${i##*/}; cd "$p"; done' {} +
zip warning: /home/dessert/myfiles.zip not found or empty
adding: d1 (stored 0%)
adding: f3/ (stored 0%)
adding: f3/d3 (stored 0%)
adding: f3/d2 (stored 0%)
adding: f3/d4 (stored 0%)
adding: d0 (stored 0%)
$ unzip -l myfiles.zip
Archive: myfiles.zip
Length Date Time Name
--------- ---------- ----- ----
0 2017-10-11 10:18 d1
0 2017-10-11 10:19 f3/
0 2017-10-11 10:19 f3/d3
0 2017-10-11 10:19 f3/d2
0 2017-10-11 10:19 f3/d4
0 2017-10-11 10:17 d0
--------- -------
0 6 files
zip
ไฟล์พร้อม-j
ตัวเลือก