Existe-t-il un moyen, éventuellement en utilisant un package, de lister récursivement tous les fichiers (avec des chemins) et sous-répertoires (ou au moins les sous-répertoires vides , puisque les chemins vers les non-vides peuvent être glanés à partir des chemins de les fichiers qui y sont contenus) du répertoire courant?
Le plus proche que j'ai pu trouver est la projectile-find-file
fonction du projectile
package (alternativement, la helm-projectile-find-file
fonction du helm-projectile
package), mais il ne semble pas pouvoir lister les dossiers vides. En outre, il semble fonctionner uniquement avec Git et d'autres référentiels de contrôle de version, mais il peut y avoir une solution pour cette limitation.
helm
ou l' autreivy
, c'est-à-dire que les résultats seront affichés dans un tamponhelm
ouivy
. S'il est impossible de satisfaire les deux exigences, la 2e est plus importante pour moi.Réponses:
En supposant que vous utilisez,
ivy
vous pouvez utiliser cette fonctionla source
helm
?helm
.ivy
est assez léger. Donnez-lui un coup de feu.répertoire-fichiers-récursivement
(Je pense que cela a été ajouté dans Emacs 25)
voici le lien vers le manuel: https://www.gnu.org/software/emacs/manual/html_node/elisp/Contents-of-Directories.html
Exemple
la source
include-directories
àt
? Je travaille sur Emacs 24 et je ne peux pas l'essayer pour le moment, mais je peux tester cela à la maison en quelques heures.Cette réponse suppose que vous souhaitez afficher une liste des noms de fichiers et de répertoires, au lieu d'en obtenir une liste Lisp.
Utilisation commandes standard Emacs
find-dired
,find-name-dired
oufind-grep-dired
. Les noms de fichiers et de répertoires trouvés sont affichés dans un tampon en mode fatigué. (Vous pouvez utiliser toute la puissance de Dired pour travailler sur les résultats.)Si vous utilisez la bibliothèque,
find-dired+.el
vous avez des versions améliorées de ces commandes Emacs standard, en plus vous avez une commandefind-time-dired
, qui trouve des fichiers plus récents ou plus anciens qu'un horodatage donné.la source
find-dired
est exactement ce que je recherche, mais existe-t-il un moyen d'imprimer uniquement les noms? Parce qu'autrement, un nom de fichier unique prend plusieurs lignes sans raison, car je ne me soucie absolument pas de la taille, de la date ou des autorisations des fichiers. J'ai essayé de courir(setcar find-ls-option "-printf '%p\n'")
avantfind-dired
, mais pour une raison quelconque, dired ne veut pas ouvrir un fichier en appuyant sur Entrée sur un élément.(
pour basculer en affichant plus que les noms de fichiers. Je la laisse la plupart du temps (aucun détail affiché), et je l’active brièvement lorsque je veux vérifier certains détails.Voir https://github.com/technomancy/find-file-in-project
Il existe des commandes pour rechercher des fichiers ou rechercher des répertoires. Mais pas les deux.
Si vous souhaitez simplement répertorier tous les sous-répertoires et fichiers de manière récursive dans un seul tampon, il existe deux commandes intégrées dans Emacs pour les âges:
M-x find-dired
. Cela dépend de l'outil CLIfind
. Sous Windows, vous devez installer Cygwin ou MYSYS qui afind
M-x find-lisp-find-dired
. Identique àfind-dired
mais écrit en Lisp. Il n'y a donc pas de dépendance de tiers. En outre, il peut reconnaître les paramètres régionaux hors de la boîte. Mais c'est plus lent quefind-dired
la source
ls
ou la fonction Emacsfind-file
, qui répertorient à la fois les fichiers et les répertoires, y compris les répertoires vides.find-dired
- ils etfind-lisp-find-dired
récursifs en ce qu'ils listent non seulement le contenu du répertoire courant, mais aussi le contenu de chacun de ses sous-répertoires, sous-sous-répertoires, etc.?Cette réponse suppose que vous souhaitez obtenir une liste Lisp des noms de fichiers et de répertoires, au lieu d'en afficher la liste.
Si vous utilisez la bibliothèque Dired +, vous pouvez utiliser la fonction
diredp-files-within
. (Vous n'avez pas besoin d'être dans un tampon Dired pour l'utiliser.)Cela fonctionne avec n'importe quelle version d'Emacs, et c'est plus général que
directory-files-recursively
.Vous pouvez lui passer une liste de fichiers et de répertoires, et il agit récursivement dans chacun d'eux.
Ou vous pouvez lui passer une fonction qui renvoie une telle liste.
S'il existe un tampon Dired pour un répertoire qui est traité, la fonction est invoquée dans ce tampon pour renvoyer la liste des fichiers à inclure.
Par exemple, si la fonction est
dired-get-marked-files
alors, seuls les fichiers et sous-répertoires marqués sont inclus.Vous pouvez lui passer un prédicat que chaque fichier ou répertoire doit satisfaire. La correspondance d'expression régulière est bien sûr un type de prédicat.
Vous pouvez lui dire de ne pas suivre les liens symboliques.
la source
la source