Dateien nach Namen suchen


11

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?


2
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

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

und genieße.


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:

C-x d ~/soft/*/*.c RET
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.