Localizando arquivos por nomes

11

Como posso trazer todos os arquivos com nomes que conformam um regex específico, recursivamente em uma árvore de diretórios, para um único buffer direcionado?

Para que eu possa renomear / excluir todos de uma vez?

iLemming
fonte
2
Você já considerou `find-name-dired '? (Usa curinga, e não regexps.) #
11386 Marco Wahl 28/11
2
Você deve enviá-lo como resposta @MarcoWahl. Eu não tinha ideia de que o dired poderia fazer isso!
Tyler #
11
Biblioteca find-dired+.elfornece uma versão aprimorada do comando find-name-dired. Ele aceita argumentos opcionais que especificam (1) profundidade mínima e máxima de pesquisa e (2) caminhos a serem excluídos da pesquisa.
23416 Drew

Respostas:

11

Curinga

Usar

M-x find-name-dired

para obter arquivos de acordo com um curinga.

Exemplo

Encontre todos os arquivos com o sufixo "org" no diretório "~ / org /". Digite o seguinte

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

e aproveitar.

Expressão regular

Usar

M-x find-dired

com argumentos adequados para obter arquivos de acordo com uma expressão regular.

Exemplo

Encontre todos os arquivos com o sufixo "org" no diretório "~ / org /". Digite o seguinte

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

e aproveitar.

Marco Wahl
fonte
É possível automatizar esse processo, onde verificar automaticamente *orgsem digitar manualmente-lo
alper
Se bem entendi, existem muitas possibilidades. Por exemplo, faça uma busca especial com um comando (defun my-find-orgfiles () (interativo) (find-name-dired "~ / myorgs /" "* org")) e coloque-o no seu arquivo init. Em seguida, use Mx my-find-orgfiles RET. Ou até mesmo vincular o comando a uma chave.
Marco Wahl
Pode ser my-find-orgfiles ()seguido por "t" e "Q" // que seleciona tudo e se aplica? @Marco Wahl
alper
2

Expressão regular

Para usar uma regex, você também pode tentar find-lisp-find-dired. Este comando pertence à lib padrão. find-lisp , que é totalmente escrito em elisp, ou seja, você não precisa ter instalado um findprograma externo .

Por exemplo, o seguinte mostra todos os arquivos com a extensão '.el' no diretório ~ / lisp:

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

(O jogo homenageia case-fold-search).

Curinga

Vale ressaltar que desde a próxima versão do Emacs (v26.1) Dired suporta wilcards na parte do diretório do argumento do nome do arquivo. Isso significa que os seguintes trabalhos:

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

(A correspondência diferencia maiúsculas de minúsculas).

Este comando mostra em um buffer direcionado todos os arquivos com extensão '.c', 2 níveis de profundidade em '~ / soft' . Isso significa que todos os arquivos como '~ / soft / foo / bar.c' serão listados, mas não os arquivos como '~ / soft / qux.c' nem '~ / soft / foo / baz / qux.c' .

O mesmo, mas sem distinção entre maiúsculas e minúsculas:

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

Bônus

Se você estiver executando o Dired com um 'ls' implementado no elisp, 'ls-lisp' ou 'eshell-ls', poderá listar recursivamente todos os arquivos que correspondem a um curinga com a seguinte sintaxe:

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

Note o '**'. Nesse caso, todos os arquivos em '~ / soft' correspondentes ao curinga são mostrados, mesmo '~ / soft / qux.c' .

No entanto, quando você estiver usando insert-directory-program a expansão de curinga é feita pelo shell do sistema; isso significa que essa sintaxe '**' recursiva funciona apenas se for suportada pelo seu shell. Por exemplo, o zsh suporta, mas o bash não. Com shells diferentes do zsh, o comando anterior fará o mesmo que:

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