Trovare file per nome


11

Come posso portare tutti i file con nomi conformi a una regex specifica, ricorsivamente in un albero di directory, in un singolo buffer diretto?

Quindi posso rinominarli / eliminarli tutti in una volta?


2
Hai già considerato "trova-nome-diretto"? (Utilizza jolly, non regexps.)
Marco Wahl,

2
Dovresti inviarlo come risposta a @MarcoWahl. Non avevo idea che Dired potesse farlo!
Tyler,

1
Library find-dired+.eloffre una versione avanzata del comando find-name-dired. Accetta argomenti facoltativi che specificano (1) profondità di ricerca min e max e (2) percorsi da escludere dalla ricerca.
Disegnato il

Risposte:


11

Carta jolly

Uso

M-x find-name-dired

per ottenere file in base a un carattere jolly.

Esempio

Trova tutti i file con il suffisso "org" nella directory "~ / org /". Digita il seguente

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

e goditelo.

Espressione regolare

Uso

M-x find-dired

con argomenti adatti per ottenere file secondo un'espressione regolare.

Esempio

Trova tutti i file con il suffisso "org" nella directory "~ / org /". Digita il seguente

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

e goditelo.


E 'possibile automatizzare questo processo in cui controllare automaticamente *orgsenza inserire manualmente
Alper

Se ti capisco correttamente ci sono molte possibilità. Ad esempio, fai un comando speciale con un comando (defun my-find-orgfiles () (interattivo) (find-name-dired "~ / myorgs /" "* org")) e inseriscilo nel tuo file init. Quindi utilizzare Mx my-find-orgfiles RET. O addirittura associare il comando a una chiave.
Marco Wahl,

Può essere my-find-orgfiles ()seguito da "t" e "Q" // che seleziona tutto e si applica? @Marco Wahl
alper,

2

Espressione regolare

Per usare un regex, potresti anche provare find-lisp-find-dired. Questo comando appartiene alla lib standard. find-lisp , che è interamente scritto in elisp, cioè non è necessario aver installato un findprogramma esterno .

Ad esempio, quanto segue mostra tutti i file con estensione '.el' nella directory ~ / lisp:

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

(La partita onora case-fold-search).

Carta jolly

Vale la pena notare che dalla prossima versione di Emacs (v26.1) Dired supporta le wilcard nella parte della directory dell'argomento nome file. Ciò significa che i seguenti lavori:

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

(La corrispondenza fa distinzione tra maiuscole e minuscole).

Questo comando mostra in un buffer Dired tutti i file con estensione '.c', 2 livelli di profondità in '~ / soft' . Ciò significa che verranno elencati tutti i file come "~ / soft / foo / bar.c" , ma non file come "~ / soft / qux.c""~ / soft / foo / baz / qux.c" .

Lo stesso ma senza distinzione tra maiuscole e minuscole:

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

indennità

Se stai eseguendo Dired con un 'ls' implementato in elisp, 'ls-lisp' o 'eshell-ls', puoi elencare ricorsivamente tutti i file che corrispondono a un carattere jolly con la seguente sintassi:

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

Notare la '**'. In questo caso vengono visualizzati tutti i file in '~ / soft' corrispondenti al carattere jolly, anche '~ / soft / qux.c' .

Tuttavia, quando si utilizza insert-directory-program l'espansione jolly viene eseguita dalla shell di sistema; ciò significa che questa sintassi '**' ricorsiva funziona solo se è supportata dalla shell. Ad esempio zsh lo supporta, ma bash no. Con shell diverse da zsh il comando precedente farà lo stesso di:

C-x d ~/soft/*/*.c RET
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.