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?
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
É 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:
find-dired+.el
fornece uma versão aprimorada do comandofind-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.Respostas:
Curinga
Usar
para obter arquivos de acordo com um curinga.
Exemplo
Encontre todos os arquivos com o sufixo "org" no diretório "~ / org /". Digite o seguinte
e aproveitar.
Expressão regular
Usar
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
e aproveitar.
fonte
*org
sem digitar manualmente-lomy-find-orgfiles ()
seguido por "t" e "Q" // que seleciona tudo e se aplica? @Marco WahlExpressã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 umfind
programa externo .Por exemplo, o seguinte mostra todos os arquivos com a extensão '.el' no diretório ~ / lisp:
(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:
(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:
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:
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:fonte