Comment puis-je apporter tous les fichiers avec des noms conformes à une expression rationnelle spécifique, récursivement dans une arborescence de répertoires, dans un seul tampon dirigé?
Je peux donc les renommer / supprimer tous en même temps?
Avez-vous déjà pensé à "find-name-dired"? (Utilise des caractères génériques, pas des expressions rationnelles.)
Marco Wahl
2
Vous devez soumettre cela comme une réponse @MarcoWahl. Je n'avais aucune idée que Dired pouvait faire ça!
Tyler
1
La bibliothèque find-dired+.elvous offre une version améliorée de la commande find-name-dired. Il accepte des arguments optionnels qui spécifient (1) les profondeurs de recherche min et max et (2) les chemins à exclure de la recherche.
Drew
Réponses:
11
Caractère générique
Utilisation
M-x find-name-dired
pour obtenir des fichiers selon un caractère générique.
Exemple
Trouvez tous les fichiers avec le suffixe "org" dans le répertoire "~ / org /". Entrez les informations suivantes
M-x find-name-dired
~/org
*org
et apprécie.
Expression régulière
Utilisation
M-x find-dired
avec des arguments appropriés pour obtenir des fichiers selon une expression régulière.
Exemple
Trouvez tous les fichiers avec le suffixe "org" dans le répertoire "~ / org /". Entrez les informations suivantes
Est-il possible d'automatiser ce processus où vérifier automatiquement *orgsans l'entrer manuellement
alper
Si je vous comprends bien, il existe de nombreuses possibilités. Par exemple, faites une recherche spéciale avec une commande avec (defun my-find-orgfiles () (interactif) (find-name-dired "~ / myorgs /" "* org")) et placez-la dans votre fichier init. Utilisez ensuite Mx my-find-orgfiles RET. Ou même liez la commande à une clé.
Marco Wahl
Peut my-find-orgfiles ()suivi par "t" et "Q" // qui sélectionne tout et applique? @Marco Wahl
alper
2
Expression régulière
Pour utiliser une expression régulière, vous pouvez également essayer find-lisp-find-dired. Cette commande appartient à la bibliothèque standard. find-lisp , qui est entièrement écrit en elisp, c'est-à-dire que vous n'avez pas besoin d'avoir installé un findprogramme externe
.
Par exemple, ce qui suit montre tous les fichiers avec l'extension '.el' dans le répertoire ~ / lisp:
M-x find-lisp-find-dired RET ~/lisp RET \.el\' RET
(Le match honore case-fold-search).
Caractère générique
Il convient de noter que depuis la prochaine version d'Emacs (v26.1), Dired prend en charge les wilcards dans la partie répertoire de l'argument du nom de fichier. Cela signifie les travaux suivants:
C-x d ~/soft/*/*.c RET
(La correspondance est sensible à la casse).
Cette commande affiche dans un tampon Dired tous les fichiers avec l'extension '.c', 2 niveaux de profondeur sous '~ / soft' . Cela signifie que tous les fichiers comme
«~ / soft / foo / bar.c» seront répertoriés, mais pas les fichiers comme «~ / soft / qux.c»
ni «~ / soft / foo / baz / qux.c» .
Le même mais insensible à la casse:
C-x d ~/soft/*/*.[cC] RET
Prime
Si vous exécutez Dired avec un 'ls' implémenté dans elisp, 'ls-lisp' ou 'eshell-ls', vous pouvez alors lister récursivement tous les fichiers correspondant à un caractère générique avec la syntaxe suivante:
C-x d ~/soft/**/*.c RET
Noter la '**'. Dans ce cas, tous les fichiers sous «~ / soft» correspondant au caractère générique sont affichés, même «~ / soft / qux.c» .
Cependant, lorsque vous utilisez insert-directory-program
l'extension, le caractère générique est effectué par le shell système; cela signifie que cette syntaxe récursive '**' ne fonctionne que si elle est prise en charge par votre shell. Par exemple, zsh le supporte, mais bash ne le fait pas. Avec les shells autres que zsh, la commande précédente fera la même chose que:
find-dired+.el
vous offre une version améliorée de la commandefind-name-dired
. Il accepte des arguments optionnels qui spécifient (1) les profondeurs de recherche min et max et (2) les chemins à exclure de la recherche.Réponses:
Caractère générique
Utilisation
pour obtenir des fichiers selon un caractère générique.
Exemple
Trouvez tous les fichiers avec le suffixe "org" dans le répertoire "~ / org /". Entrez les informations suivantes
et apprécie.
Expression régulière
Utilisation
avec des arguments appropriés pour obtenir des fichiers selon une expression régulière.
Exemple
Trouvez tous les fichiers avec le suffixe "org" dans le répertoire "~ / org /". Entrez les informations suivantes
et apprécie.
la source
*org
sans l'entrer manuellementmy-find-orgfiles ()
suivi par "t" et "Q" // qui sélectionne tout et applique? @Marco WahlExpression régulière
Pour utiliser une expression régulière, vous pouvez également essayer
find-lisp-find-dired
. Cette commande appartient à la bibliothèque standard. find-lisp , qui est entièrement écrit en elisp, c'est-à-dire que vous n'avez pas besoin d'avoir installé unfind
programme externe .Par exemple, ce qui suit montre tous les fichiers avec l'extension '.el' dans le répertoire ~ / lisp:
(Le match honore
case-fold-search
).Caractère générique
Il convient de noter que depuis la prochaine version d'Emacs (v26.1), Dired prend en charge les wilcards dans la partie répertoire de l'argument du nom de fichier. Cela signifie les travaux suivants:
(La correspondance est sensible à la casse).
Cette commande affiche dans un tampon Dired tous les fichiers avec l'extension '.c', 2 niveaux de profondeur sous '~ / soft' . Cela signifie que tous les fichiers comme «~ / soft / foo / bar.c» seront répertoriés, mais pas les fichiers comme «~ / soft / qux.c» ni «~ / soft / foo / baz / qux.c» .
Le même mais insensible à la casse:
Prime
Si vous exécutez Dired avec un 'ls' implémenté dans elisp, 'ls-lisp' ou 'eshell-ls', vous pouvez alors lister récursivement tous les fichiers correspondant à un caractère générique avec la syntaxe suivante:
Noter la '**'. Dans ce cas, tous les fichiers sous «~ / soft» correspondant au caractère générique sont affichés, même «~ / soft / qux.c» .
Cependant, lorsque vous utilisez
insert-directory-program
l'extension, le caractère générique est effectué par le shell système; cela signifie que cette syntaxe récursive '**' ne fonctionne que si elle est prise en charge par votre shell. Par exemple, zsh le supporte, mais bash ne le fait pas. Avec les shells autres que zsh, la commande précédente fera la même chose que:la source