Score:0

ฉันจะค้นหาโฟลเดอร์ที่ไม่มีชื่อเฉพาะได้อย่างไร

ธง bf

ฉันพยายามค้นหาโฟลเดอร์จำนวนมาก โดยทั้งหมดไม่มีวงเล็บ เป็นโฟลเดอร์ภาพยนตร์ เช่น:

ซอมบี้เนื้อกิน (1979) [tmdb-7219]
ซอมบี้แลนด์ (2009) [tmdb-19908]
Zombieland แตะสองครั้ง (2019) [tmdb-338967]

แต่ฉันต้องหาอันที่ไม่มีวงเล็บ [tmdb]

ฉันไม่แน่ใจว่าต้องทำอย่างไร?

แก้ไขด่วน: ลองใช้ reg-ex \[.*?\] เพื่อค้นหาทุกอย่างที่มีวงเล็บ แต่ฉันไม่แน่ใจว่ามันทำงานได้อย่างถูกต้องหรือไม่ (ฉันไม่ค่อยเก่งเรื่อง regex แต่การใช้ตัวทดสอบ reg-ex ยืนยันว่ามันมองหาอะไรในวงเล็บ)

แต่ฉันต้องหาโฟลเดอร์ที่ไม่มีวงเล็บ .. และฉันไม่รู้ว่าต้องทำอย่างไร

vanadium avatar
cn flag
คุณเป็นอย่างไรบ้างในตอนแรก? ในบางกรณี `grep -v` อาจช่วยคุณได้
SDXCPTDR avatar
bf flag
การใช้สตริงนี้ `'\[.*?\]'' เมื่อใช้ `find`.. ไม่แน่ใจว่าทำงานได้อย่างถูกต้อง แต่ฉันต้องหาโฟลเดอร์ที่ไม่มีวงเล็บ :)
vanadium avatar
cn flag
เราต้องการข้อมูลนี้ในคำถาม ใช้ "แก้ไข" เพื่อชี้แจงคำถามของคุณ ความคิดเห็นอาจไม่ถูกอ่านหรืออาจหายไปเมื่อใดก็ได้
muru avatar
us flag
"ผู้ทดสอบ reg-ex" ของคุณใช้รสชาติ regex เดียวกันกับ "find" หรือไม่ `.*?` ดูเหมือน Perl มันไม่สมเหตุสมผลที่จะมี `?` หลัง `*` ใน BRE หรือ ERE
SDXCPTDR avatar
bf flag
เพิ่งลองสิ่งนี้: https://www.regextester.com/ ด้วยผลลัพธ์: https://i.imgur.com/mKIBLJC.png -- ขออภัยอีกครั้ง ฉันไม่รู้มากเกี่ยวกับ regex :/
Score:2
ธง cn

หา คุณสมบัติ -ไม่ ผู้ประกอบการ บอกให้ค้นหาจากที่ใด ประเภทของรายการที่จะค้นหา (เช่น -ประเภท ง เพื่อค้นหาเฉพาะโฟลเดอร์) และสิ่งที่ไม่ควรอยู่ในชื่อ ได้แก่ -ไม่ -ชื่อ '*\[*\]'. ดังนั้น

ค้นหา / ที่ไหนสักแห่ง - พิมพ์ d - ไม่ - ชื่อ '*\[*\]'
SDXCPTDR avatar
bf flag
ขอบคุณ! สิ่งนี้ใช้ได้ผลดีสำหรับฉัน เพิ่งเพิ่ม `-maxความลึก 1` ในกรณีของฉัน :)
Score:1
ธง in
Cas

สามารถทำได้ง่ายๆ

ls -Aq1 | grep -Pv '.*\[tmdb-\d+\].*'

ท่อหลังจาก โดยทั่วไปถือว่าไม่ดี อย่างไรก็ตาม ฉันถือว่าโฟลเดอร์ทั้งหมดไม่ได้ตั้งชื่อแปลก ๆ เพราะเป็นเพียงโฟลเดอร์ภาพยนตร์ ดังนั้นฉันคิดว่าการต่อท้าย สบายดีที่นี่

ฉันยังไม่ได้ทดสอบ แต่ฉันค่อนข้างมั่นใจว่าน่าจะใช้งานได้

นอกจากนี้ ฉันเดาว่าคุณจะใส่โฟลเดอร์เหล่านั้นในลูปเพื่อเพิ่ม id ให้กับชื่อ เดาล้วนๆ แต่ฉันถือว่า สิ่งนี้มีประโยชน์เพราะเอาต์พุต ls (เนื่องจากไฟล์ -..1) จะอยู่ในรายการ คุณจึงทำขั้นตอนนี้เพื่อประมวลผลทีละโฟลเดอร์ได้อย่างง่ายดาย:

ls -Aq1 | grep -Pv '.*\[tmdb-\d+\].*' | \
ในขณะที่อ่านระดับ -r
ทำ
   ...
เสร็จแล้ว

หรือ

ls -Aq1 | \
ในขณะที่อ่านระดับ -r
ทำ
   ถ้า ! echo "$level" | grep -Pq '.*\[tmdb-\d+\].*'
   แล้ว
      ...
   ไฟ
เสร็จแล้ว
SDXCPTDR avatar
bf flag
สิ่งนี้ยังทำงานได้ดีมาก ขอขอบคุณ.
Score:0
ธง hr

หากคุณไม่ต้องการค้นหาซ้ำ bash shell ของ ภายนอก สามารถทำการปฏิเสธโดยใช้ !(ลวดลาย) อดีต.

shopt -s extglob

printf '%s\n' !(*\[tmdb-*\]*)/

เดอะ ภายนอก ตัวเลือกอาจเปิดใช้งานตามค่าเริ่มต้นใน bash shell แบบโต้ตอบของคุณ ต่อท้าย / จำเป็นเฉพาะในกรณีที่คุณต้องการแยกไฟล์ธรรมดาออกจากการจับคู่ - เทียบเท่ากับ หา คำสั่ง พิมพ์ -d.

อดีต. ได้รับไดเรกทอรีที่มีเนื้อหา

$ ล
'Zombie Flesh Eaters (1979) [อย่างอื่นที่นี่]' 'Zombieland (2009) [tmdb-19908]'
'Zombie Flesh Eaters (1979) [tmdb-7219]' 'Zombieland Double Tap (2019) [tmdb-338967]'
'ซอมบี้แลนด์ (2009)'

แล้ว

$ printf '%s\n' !(*\[tmdb-*\]*)/
Zombie Flesh Eaters (1979) [อย่างอื่นที่นี่]/
ซอมบี้แลนด์ (2009)/

หรือ

$ ls -d !(*\[tmdb-*\]*)/
'Zombie Flesh Eaters (1979) [อย่างอื่นที่นี่]/' 'Zombieland (2009)/'

ไม่เหมือน หาซึ่งจะไม่ตรงกับไดเร็กทอรีที่ซ่อนอยู่ตามค่าเริ่มต้น (แต่คุณสามารถรวมไดเร็กทอรีเหล่านั้นได้ด้วยการตั้งค่า shopt -s ดอทโกล).

ถ้าคุณ ทำ ต้องการค้นหาซ้ำ คุณสามารถเพิ่ม shopt -s โกลบอลสตาร์ และใช้ **/!(*\[tmdb-*\]*)/ แม้ว่าฉันจะเลือก หา ในกรณีนี้.

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา