Sudahkah Anda mempertimbangkan `find-name-dired '? (Menggunakan wildcard, bukan regexps.)
Marco Wahl
2
Anda harus mengirimkannya sebagai jawaban @MarcoWahl. Saya tidak tahu dired bisa melakukan itu!
Tyler
1
Perpustakaan find-dired+.elmemberi Anda versi perintah yang ditingkatkan find-name-dired. Ini menerima argumen opsional yang menentukan (1) min & max kedalaman pencarian dan (2) jalur untuk dikecualikan dari pencarian.
Drew
Jawaban:
11
Wildcard
Menggunakan
M-x find-name-dired
untuk mendapatkan file sesuai dengan wildcard.
Contoh
Temukan semua file dengan akhiran "org" di direktori "~ / org /". Masukkan berikut
M-x find-name-dired
~/org
*org
dan nikmati.
Ekspresi Reguler
Menggunakan
M-x find-dired
dengan argumen yang sesuai untuk mendapatkan file sesuai dengan ekspresi reguler.
Contoh
Temukan semua file dengan akhiran "org" di direktori "~ / org /". Masukkan berikut
Apakah mungkin untuk mengotomatiskan proses ini di mana secara otomatis memeriksa *orgtanpa memasukkannya secara manual
alper
Jika saya mengerti Anda dengan benar ada banyak kemungkinan. Misalnya membuat perintah pencarian khusus dengan (defun my-find-orgfiles () (interaktif) (find-name-dired "~ / myorgs /" "* org")) dan masukkan ke dalam file init Anda. Kemudian gunakan Mx my-find-orgfiles RET. Atau bahkan ikat perintah ke tombol.
Marco Wahl
Bisakah my-find-orgfiles ()diikuti oleh "t" dan "Q" // yang memilih semua dan menerapkan? @Marco Wahl
alper
2
Ekspresi Reguler
Untuk menggunakan regex, Anda mungkin juga mencoba find-lisp-find-dired. Perintah ini milik lib standar. find-lisp , yang seluruhnya ditulis dalam elisp yaitu, Anda tidak perlu menginstal findprogram eksternal
.
Sebagai contoh, berikut ini menunjukkan semua file dengan ekstensi '.el' di bawah direktori ~ / lisp:
M-x find-lisp-find-dired RET ~/lisp RET \.el\' RET
(Pertandingan itu menghormati case-fold-search).
Wildcard
Perlu dicatat bahwa sejak rilis Emacs berikutnya (v26.1) Dired mendukung kartu wil di bagian direktori dari argumen nama file. Itu berarti bekerja sebagai berikut:
C-x d ~/soft/*/*.c RET
(Pertandingan ini peka huruf besar-kecil).
Perintah ini menunjukkan dalam buffer Dired semua file dengan ekstensi '.c', 2 level kedalaman di bawah '~ / soft' . Itu berarti, semua file seperti
'~ / soft / foo / bar.c' akan terdaftar, tetapi bukan file seperti '~ / soft / qux.c'
atau '~ / soft / foo / baz / qux.c' .
Yang sama tetapi tidak peka huruf besar-kecil:
C-x d ~/soft/*/*.[cC] RET
Bonus
Jika Anda menjalankan Dired dengan 'ls' diimplementasikan di elisp, 'ls-lisp' atau 'eshell-ls', maka Anda dapat secara rekursif mendaftarkan semua file yang cocok dengan wildcard dengan sintaksis berikut:
C-x d ~/soft/**/*.c RET
Catat '**'. Dalam hal ini semua file di bawah '~ / soft' yang cocok dengan wildcard ditampilkan, bahkan '~ / soft / qux.c' .
Namun, saat Anda menggunakan insert-directory-program
ekspansi wildcard dibuat oleh shell sistem; itu artinya, sintaksis '**' rekursif ini hanya berfungsi jika didukung oleh shell Anda. Misalnya zsh memang mendukungnya, tetapi bash tidak. Dengan shell lain yang zsh, perintah sebelumnya akan melakukan hal yang sama seperti:
find-dired+.el
memberi Anda versi perintah yang ditingkatkanfind-name-dired
. Ini menerima argumen opsional yang menentukan (1) min & max kedalaman pencarian dan (2) jalur untuk dikecualikan dari pencarian.Jawaban:
Wildcard
Menggunakan
untuk mendapatkan file sesuai dengan wildcard.
Contoh
Temukan semua file dengan akhiran "org" di direktori "~ / org /". Masukkan berikut
dan nikmati.
Ekspresi Reguler
Menggunakan
dengan argumen yang sesuai untuk mendapatkan file sesuai dengan ekspresi reguler.
Contoh
Temukan semua file dengan akhiran "org" di direktori "~ / org /". Masukkan berikut
dan nikmati.
sumber
*org
tanpa memasukkannya secara manualmy-find-orgfiles ()
diikuti oleh "t" dan "Q" // yang memilih semua dan menerapkan? @Marco WahlEkspresi Reguler
Untuk menggunakan regex, Anda mungkin juga mencoba
find-lisp-find-dired
. Perintah ini milik lib standar. find-lisp , yang seluruhnya ditulis dalam elisp yaitu, Anda tidak perlu menginstalfind
program eksternal .Sebagai contoh, berikut ini menunjukkan semua file dengan ekstensi '.el' di bawah direktori ~ / lisp:
(Pertandingan itu menghormati
case-fold-search
).Wildcard
Perlu dicatat bahwa sejak rilis Emacs berikutnya (v26.1) Dired mendukung kartu wil di bagian direktori dari argumen nama file. Itu berarti bekerja sebagai berikut:
(Pertandingan ini peka huruf besar-kecil).
Perintah ini menunjukkan dalam buffer Dired semua file dengan ekstensi '.c', 2 level kedalaman di bawah '~ / soft' . Itu berarti, semua file seperti '~ / soft / foo / bar.c' akan terdaftar, tetapi bukan file seperti '~ / soft / qux.c' atau '~ / soft / foo / baz / qux.c' .
Yang sama tetapi tidak peka huruf besar-kecil:
Bonus
Jika Anda menjalankan Dired dengan 'ls' diimplementasikan di elisp, 'ls-lisp' atau 'eshell-ls', maka Anda dapat secara rekursif mendaftarkan semua file yang cocok dengan wildcard dengan sintaksis berikut:
Catat '**'. Dalam hal ini semua file di bawah '~ / soft' yang cocok dengan wildcard ditampilkan, bahkan '~ / soft / qux.c' .
Namun, saat Anda menggunakan
insert-directory-program
ekspansi wildcard dibuat oleh shell sistem; itu artinya, sintaksis '**' rekursif ini hanya berfungsi jika didukung oleh shell Anda. Misalnya zsh memang mendukungnya, tetapi bash tidak. Dengan shell lain yang zsh, perintah sebelumnya akan melakukan hal yang sama seperti:sumber