ฝากรายการของไฟล์ที่ไม่มีอยู่ทั้งหมด


10

ฉันใช้คำสั่งจากสคริปต์เช่น

tar -c -f ar.tar a b c d

โดยที่ b, c และ d อาจไม่มีอยู่และอาจเป็นไดเร็กทอรี โซลูชั่นที่ฉันได้มาด้วยกำลังท่อส่งออกของls -dไปgrepแล้วประกบมันลงไปในtarคำสั่งหรือการเปิด globs @(a|b|c|d)ที่เพิ่มขึ้นสำหรับ

มีวิธีที่เหนือกว่าในการทำเช่นนี้? ฉันใช้ Debian Wheezy ซึ่งดูเหมือนจะไม่มี--includeพารามิเตอร์


คุณมี--ignore-failed-readตัวเลือกหรือไม่?
Costas

1
พยายามแล้วยังคงมีข้อผิดพลาดสำหรับไฟล์ที่ไม่มีอยู่เลย
gidyn

1
ใช่ข้อความแสดงข้อผิดพลาดมีอยู่ แต่สร้างไฟล์เก็บถาวรแล้ว
Costas

คำตอบ:


8

คุณสามารถลอง

 tar cf ar.tar $(ls a b c d )

ที่ไหน

  • c สำหรับการสร้าง
  • f ar.tar ระบุไฟล์ tar

  • $(ls a b c d) จะแสดงรายการไปยัง stdin ว่าไฟล์ใดมีอยู่จริง (และให้ข้อผิดพลาดกับไฟล์อื่น)


2
tar cf ar.tar $(ls -d a b c d 2>/dev/null)ทำงานได้อย่างสมบูรณ์ .. แต่ฉันคิดว่ามันดีกว่ากับ extglob
gidyn

ตอนนี้ฉันกำลังย้ายสคริปต์ไปยังขีดกลางดังนั้นไม่extglob- ฉันใช้รหัสในความคิดเห็นของฉันด้านบน
gidyn

1

หากคุณมีเส้นทางแบบเต็มของไฟล์ในไฟล์เก็บถาวร tar คุณสามารถทำได้:

tar -c -f ar.tar $(readlink -e a b c d)

-eตัวเลือกในการ readlink จะ canonicalize ชื่อไฟล์ที่มีอยู่และเงียบไม่สนใจคนอื่น ๆ


ฉันเดาว่าอาจทำงานได้ถ้าฉัน--strip-componentsแยกออก
gidyn

0

ใช้

find path/to/dir -name "*.ext1" -o -name "*.ext2"

คำอธิบาย

  1. พารามิเตอร์แรกคือไดเรกทอรีที่คุณต้องการค้นหา
  2. โดยค่าเริ่มต้นfindจะเรียกซ้ำ
  3. ยืน-o -orดังนั้นด้านบนหมายถึงการค้นหาไวด์การ์ดนี้หรืออันนี้ -oหากคุณมีเพียงรูปแบบหนึ่งแล้วไม่มีความจำเป็นในการ
  4. จำเป็นต้องใช้เครื่องหมายคำพูดล้อมรอบลวดลายตัวแทน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.