Wie kann ich alle Dateien mit Namen, die einem bestimmten regulären Ausdruck entsprechen, rekursiv in einem Verzeichnisbaum in einen einzelnen Verzeichnispuffer bringen?
Also kann ich sie alle auf einmal umbenennen / löschen?
Haben Sie bereits über "find-name-dired" nachgedacht? (Verwendet Platzhalter, keine regulären Ausdrücke.)
Marco Wahl
2
Sie sollten dies als Antwort @MarcoWahl einreichen. Ich hatte keine Ahnung, dass dired das tun könnte!
Tyler
1
Bibliothek find-dired+.elbietet Ihnen eine erweiterte Version des Befehls find-name-dired. Es werden optionale Argumente akzeptiert, die (1) minimale und maximale Suchtiefen und (2) Pfade angeben, die von der Suche ausgeschlossen werden sollen.
Drew
Antworten:
11
Platzhalter
Verwenden
M-x find-name-dired
um Dateien nach einem Platzhalter zu erhalten.
Beispiel
Suchen Sie alle Dateien mit dem Suffix "org" im Verzeichnis "~ / org /". Geben Sie das folgende ein
M-x find-name-dired
~/org
*org
und genieße.
Regulären Ausdruck
Verwenden
M-x find-dired
mit geeigneten Argumenten, um Dateien gemäß einem regulären Ausdruck zu erhalten.
Beispiel
Suchen Sie alle Dateien mit dem Suffix "org" im Verzeichnis "~ / org /". Geben Sie das folgende ein
Ist es möglich, diesen Vorgang zu automatisieren, bei dem automatisch *org
nachgefragt wird,
Wenn ich Sie richtig verstehe, gibt es viele Möglichkeiten. Machen Sie beispielsweise einen speziellen Suchbefehl mit (defun my-find-orgfiles () (interaktiv) (find-name-dired "~ / myorgs /" "* org")) und fügen Sie ihn in Ihre Init-Datei ein. Verwenden Sie dann Mx my-find-orgfiles RET. Oder binden Sie den Befehl sogar an einen Schlüssel.
Marco Wahl
Kann my-find-orgfiles ()gefolgt von "t" und "Q" //, die alle auswählen und anwenden? @ Marco Wahl
alper
2
Regulären Ausdruck
Um eine Regex zu verwenden, können Sie auch versuchen find-lisp-find-dired. Dieser Befehl gehört zur Standardbibliothek. find-lisp , das vollständig in elisp geschrieben ist, dh Sie müssen kein externes findProgramm installiert haben
.
Im Folgenden werden beispielsweise alle Dateien mit der Erweiterung '.el' im Verzeichnis ~ / lisp angezeigt:
M-x find-lisp-find-dired RET ~/lisp RET \.el\' RET
(Das Match ehrt case-fold-search).
Platzhalter
Es ist anzumerken, dass Dired seit der nächsten Emacs-Version (Version 26.1) Wilcards im Verzeichnis des Dateinamenarguments unterstützt. Das heißt folgendes funktioniert:
C-x d ~/soft/*/*.c RET
(Bei der Übereinstimmung wird zwischen Groß- und Kleinschreibung unterschieden).
Dieser Befehl zeigt in einem Dired-Puffer alle Dateien mit der Erweiterung '.c', 2 Tiefenstufen unter '~ / soft' an . Das heißt, alle Dateien wie
'~ / soft / foo / bar.c' werden aufgelistet, aber keine Dateien wie '~ / soft / qux.c'
oder '~ / soft / foo / baz / qux.c' .
Das gleiche, aber ohne Berücksichtigung der Groß- und Kleinschreibung:
C-x d ~/soft/*/*.[cC] RET
Bonus
Wenn Sie Dired mit einem in elisp, 'ls-lisp' oder 'eshell-ls' implementierten 'ls' ausführen, können Sie alle Dateien, die einem Platzhalter entsprechen, mit der folgenden Syntax rekursiv auflisten :
C-x d ~/soft/**/*.c RET
Beachten Sie das '**'. In diesem Fall werden alle Dateien unter '~ / soft' angezeigt, die mit dem Platzhalter übereinstimmen, auch '~ / soft / qux.c' .
Wenn Sie jedoch insert-directory-program
die Platzhaltererweiterung verwenden, wird diese von der Systemshell vorgenommen. Das heißt, diese rekursive '**' - Syntax funktioniert nur, wenn sie von Ihrer Shell unterstützt wird. Zum Beispiel unterstützt zsh es, bash jedoch nicht. Bei anderen Shells als zsh führt der vorherige Befehl Folgendes aus:
find-dired+.el
bietet Ihnen eine erweiterte Version des Befehlsfind-name-dired
. Es werden optionale Argumente akzeptiert, die (1) minimale und maximale Suchtiefen und (2) Pfade angeben, die von der Suche ausgeschlossen werden sollen.Antworten:
Platzhalter
Verwenden
um Dateien nach einem Platzhalter zu erhalten.
Beispiel
Suchen Sie alle Dateien mit dem Suffix "org" im Verzeichnis "~ / org /". Geben Sie das folgende ein
und genieße.
Regulären Ausdruck
Verwenden
mit geeigneten Argumenten, um Dateien gemäß einem regulären Ausdruck zu erhalten.
Beispiel
Suchen Sie alle Dateien mit dem Suffix "org" im Verzeichnis "~ / org /". Geben Sie das folgende ein
und genieße.
quelle
*org
my-find-orgfiles ()
gefolgt von "t" und "Q" //, die alle auswählen und anwenden? @ Marco WahlRegulären Ausdruck
Um eine Regex zu verwenden, können Sie auch versuchen
find-lisp-find-dired
. Dieser Befehl gehört zur Standardbibliothek. find-lisp , das vollständig in elisp geschrieben ist, dh Sie müssen kein externesfind
Programm installiert haben .Im Folgenden werden beispielsweise alle Dateien mit der Erweiterung '.el' im Verzeichnis ~ / lisp angezeigt:
(Das Match ehrt
case-fold-search
).Platzhalter
Es ist anzumerken, dass Dired seit der nächsten Emacs-Version (Version 26.1) Wilcards im Verzeichnis des Dateinamenarguments unterstützt. Das heißt folgendes funktioniert:
(Bei der Übereinstimmung wird zwischen Groß- und Kleinschreibung unterschieden).
Dieser Befehl zeigt in einem Dired-Puffer alle Dateien mit der Erweiterung '.c', 2 Tiefenstufen unter '~ / soft' an . Das heißt, alle Dateien wie '~ / soft / foo / bar.c' werden aufgelistet, aber keine Dateien wie '~ / soft / qux.c' oder '~ / soft / foo / baz / qux.c' .
Das gleiche, aber ohne Berücksichtigung der Groß- und Kleinschreibung:
Bonus
Wenn Sie Dired mit einem in elisp, 'ls-lisp' oder 'eshell-ls' implementierten 'ls' ausführen, können Sie alle Dateien, die einem Platzhalter entsprechen, mit der folgenden Syntax rekursiv auflisten :
Beachten Sie das '**'. In diesem Fall werden alle Dateien unter '~ / soft' angezeigt, die mit dem Platzhalter übereinstimmen, auch '~ / soft / qux.c' .
Wenn Sie jedoch
insert-directory-program
die Platzhaltererweiterung verwenden, wird diese von der Systemshell vorgenommen. Das heißt, diese rekursive '**' - Syntax funktioniert nur, wenn sie von Ihrer Shell unterstützt wird. Zum Beispiel unterstützt zsh es, bash jedoch nicht. Bei anderen Shells als zsh führt der vorherige Befehl Folgendes aus:quelle