ฉันจะรับรายการไฟล์ที่ตรงกับรายการของนิพจน์ทั่วไปได้อย่างไร


0

ฉันต้องการดูว่าไม่มีการสำรองข้อมูลโดยใช้นิพจน์ทั่วไป รายการอยู่ที่นี่: https://support.code42.com/CrashPlan/4/Troubleshooting/What_Is_Not_Backing_Up#Admin_Excludes

ฉันเหนื่อย

$ cat | xargs -L 1 echo find /cygdrive/c/Users/Chloe -regex -name

และวางรายการของนิพจน์ทั่วไปซึ่งดูดี เมื่อฉันลบechoมันมันทำให้เกิดข้อผิดพลาด

find: paths must precede expression: .*/(?:42|d{8,}).*/(?:cp|~).*

ฉันลองหนึ่งบรรทัดด้วยตนเองและได้รับ

$ find /cygdrive/c/Users/Chloe -regex -name .*.part
find: paths must precede expression: .*.part

ฉันยังลองใช้คำพูด

$ find /cygdrive/c/Users/Chloe -regex -name '.*.part'
find: paths must precede expression: .*.part

ฉันลองเปลี่ยนคำสั่งด้วย

$ find -regex -name '.*.part' /cygdrive/c/Users/Chloe
find: paths must precede expression: .*.part

ดังนั้นฉันจะค้นหาไฟล์ทั้งหมดที่ตรงกับการแสดงออกปกติเหล่านั้นได้อย่างไร ฉันรู้ว่าบางคำสั่งอนุญาตให้คุณระบุ@fileเป็นอาร์กิวเมนต์เพื่อรับตัวเลือกบรรทัดคำสั่งจากไฟล์ แต่ฉันไม่เห็นว่าในfindหน้าคน

คำตอบ:


2

สิ่งนี้ใช้ได้ผล

$ cat | xargs -L 1 -d \\n find 2>/dev/null /cygdrive/c/Users/Chloe -regex
  • -L 1หมายถึงการประมวลผล 1 อาร์กิวเมนต์ต่อครั้งสำหรับแต่ละfindคำสั่งเท่านั้นและอย่ารวมอาร์กิวเมนต์เข้าด้วยกันเป็นบรรทัดคำสั่งขนาดยักษ์หนึ่งบรรทัด
  • -d \\nหมายถึงใช้ newline เป็นตัวคั่นอาร์กิวเมนต์เนื่องจากอาร์กิวเมนต์อินพุตบางตัวมีช่องว่าง คุณต้องใช้เครื่องหมายแบ็กสแลชสองครั้งเพื่อไม่ให้เชลล์ตีความโดยทันที
  • 2>/dev/null ป้องกันข้อผิดพลาดเช่น 'ไม่สามารถอ่านไดเรกทอรี ... '
  • -regexหมายถึงใช้การแสดงออกปกติสำหรับชื่อไฟล์ เห็นได้ชัด-regexและ-nameไม่เกิดร่วมกันแม้ว่าฉันจะใช้การแสดงออกปกติกับ-nameก่อน

^Dเพียงแค่วางรายการแสดงออกปกติและจบด้วยการป้อนและ

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