การค้นหาไฟล์ด้วยชื่อ


11

ฉันจะนำไฟล์ทั้งหมดที่มีชื่อที่สอดคล้องกับ regex ที่เฉพาะเจาะจงซึ่งเรียกใช้ซ้ำในไดเรกทอรีต้นไม้ไปยังบัฟเฟอร์ dired เดียวได้อย่างไร

ดังนั้นฉันสามารถเปลี่ยนชื่อ / ลบพวกเขาทั้งหมดในครั้งเดียว?


2
คุณถือว่า `find-name-dired 'แล้วหรือยัง? (ใช้ไวด์การ์ดไม่ใช่ regexps)
Marco Wahl

2
คุณควรส่งนั่นเป็นคำตอบ @MarcoWahl ฉันไม่รู้ว่าจะทำเช่นนั้นได้!
Tyler

1
Library find-dired+.elช่วยให้คุณมีเวอร์ชันคำสั่งขั้นfind-name-diredสูง ยอมรับอาร์กเผื่อเลือกที่ระบุ (1) การค้นหาขั้นต่ำและความลึกสูงสุดและ (2) พา ธ เพื่อแยกออกจากการค้นหา
ดึง

คำตอบ:


11

Wildcard

ใช้

M-x find-name-dired

เพื่อรับไฟล์ตาม wildcard

ตัวอย่าง

ค้นหาไฟล์ทั้งหมดที่มีคำลงท้าย "org" ในไดเรกทอรี "~ / org /" ป้อนต่อไปนี้

M-x find-name-dired
~/org
*org

และสนุกสนาน.

การแสดงออกปกติ

ใช้

M-x find-dired

พร้อมอาร์กิวเมนต์ที่เหมาะสมเพื่อรับไฟล์ตามนิพจน์ทั่วไป

ตัวอย่าง

ค้นหาไฟล์ทั้งหมดที่มีคำลงท้าย "org" ในไดเรกทอรี "~ / org /" ป้อนต่อไปนี้

M-x find-dired
~/org
-regex ".*org$"

และสนุกสนาน.


เป็นไปได้ไหมที่ทำให้กระบวนการนี้เป็นอัตโนมัติซึ่งจะทำการตรวจสอบโดยอัตโนมัติ*orgโดยไม่ต้องป้อนเอง
alper

ถ้าฉันเข้าใจคุณอย่างถูกต้องมีความเป็นไปได้มากมาย เช่นสร้างคำสั่งพิเศษด้วยการค้นหา (defun my-find-orgfiles () (แบบโต้ตอบ) (find-name-dired "~ / myorgs /" "* org") และวางลงในไฟล์ init ของคุณ จากนั้นใช้ Mx my-find-orgfiles RET หรือแม้แต่ผูกคำสั่งกับคีย์
Marco Wahl

สามารถmy-find-orgfiles ()ตามด้วย "T" และ "Q" // ที่เลือกทั้งหมดและนำไปใช้? @Marco Wahl
alper

2

การแสดงออกปกติ

หากต้องการใช้ regex find-lisp-find-diredคุณอาจลอง คำสั่งนี้เป็นของ lib มาตรฐาน find-lispซึ่งเขียนด้วย elisp เช่นคุณไม่จำเป็นต้องติดตั้งfindโปรแกรมภายนอก

ตัวอย่างเช่นต่อไปนี้แสดงไฟล์ทั้งหมดที่มีนามสกุล '.el' ภายใต้ไดเรกทอรี ~ / lisp:

M-x find-lisp-find-dired RET ~/lisp RET \.el\' RET

(การแข่งขันเกียรตินิยมcase-fold-search)

Wildcard

เป็นที่น่าสังเกตว่าตั้งแต่รุ่น Emacs รุ่นถัดไป (v26.1) Dired รองรับ wilcards ในส่วนไดเรกทอรีของอาร์กิวเมนต์ชื่อไฟล์ นั่นหมายถึงงานต่อไปนี้:

C-x d ~/soft/*/*.c RET

(การแข่งขันเป็นกรณี ๆ ไป)

คำสั่งนี้จะแสดงให้เห็นใน Dired buffer ไฟล์ทั้งหมดที่มี '.c' ขยาย 2 ระดับความลึกใต้'~ / อ่อน' นั่นหมายความว่าไฟล์ทั้งหมดเช่น '~ / นุ่ม / foo / bar.c'จะแสดง แต่ไม่ไฟล์เช่น'~ / นุ่ม / qux.c' หรือ'~ / นุ่ม / foo / baz / qux.c'

ตัวพิมพ์เล็กและตัวพิมพ์เล็ก:

C-x d ~/soft/*/*.[cC] RET

โบนัส

ถ้าคุณกำลังเรียก Dired ด้วย 'LS' ดำเนินการใน Elisp 'LS-กระเพื่อม' หรือ 'eshell-LS' แล้วคุณสามารถซ้ำรายการไฟล์ทั้งหมดที่ตรงกับสัญลักษณ์แทนด้วย syntaxis ต่อไปนี้:

C-x d ~/soft/**/*.c RET

หมายเหตุ '**' ในกรณีนี้ไฟล์ทั้งหมดภายใต้'~ / นุ่ม'จับคู่สัญลักษณ์แสดงแม้'~ / นุ่ม / qux.c'

อย่างไรก็ตามเมื่อคุณใช้insert-directory-program ส่วนขยายของ wildcard นั้นทำโดยเชลล์ระบบ นั่นหมายความว่าซินแท็กซ์ '**' แบบเรียกซ้ำนี้ใช้งานได้หากเชลล์ของคุณรองรับ ยกตัวอย่างเช่น zsh รองรับ แต่ทุบตีไม่ได้ ด้วยเชลล์อื่น ๆ ที่ zsh คำสั่งก่อนหน้าจะทำเช่นเดียวกันกับ:

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