Jak mogę przenieść wszystkie pliki o nazwach zgodnych z określonym wyrażeniem regularnym, rekurencyjnie w drzewie katalogów, do pojedynczego bufora z diodami?
Więc mogę zmienić nazwę / usunąć je wszystkie naraz?
Czy rozważałeś już słowo „find-name-dired”? (Używa symboli wieloznacznych, a nie wyrażeń regularnych.)
Marco Wahl
2
Powinieneś przesłać to jako odpowiedź @MarcoWahl. Nie miałem pojęcia, że dired może to zrobić!
Tyler
1
Biblioteka find-dired+.elzapewnia ulepszoną wersję polecenia find-name-dired. Akceptuje opcjonalne argumenty, które określają (1) minimalną i maksymalną głębokość wyszukiwania oraz (2) ścieżki do wykluczenia z wyszukiwania.
Drew
Odpowiedzi:
11
Dzika karta
Posługiwać się
M-x find-name-dired
aby uzyskać pliki zgodnie z symbolem wieloznacznym.
Przykład
Znajdź wszystkie pliki z sufiksem „org” w katalogu „~ / org /”. Wpisz następujące informacje
M-x find-name-dired
~/org
*org
i baw się dobrze.
Wyrażenie regularne
Posługiwać się
M-x find-dired
z odpowiednimi argumentami, aby uzyskać pliki zgodnie z wyrażeniem regularnym.
Przykład
Znajdź wszystkie pliki z sufiksem „org” w katalogu „~ / org /”. Wpisz następujące informacje
Czy to możliwe, aby zautomatyzować ten proces, gdzie automatycznie sprawdzać *orgbez ręcznego wprowadzania go
alper
Jeśli dobrze cię rozumiem, istnieje wiele możliwości. Np. Utwórz specjalne polecenie, używając polecenia (defun my-find-orgfiles () (Interactive) (find-name-dired "~ / myorgs /" "* org")) i umieść je w pliku init. Następnie użyj MET my-find-orgfiles RET. Lub nawet powiąż polecenie z klawiszem.
Marco Wahl
Czy my-find-orgfiles ()po „t” i „Q” // można zaznaczyć wszystkie i zastosować? @Marco Wahl
alper
2
Wyrażenie regularne
Aby użyć wyrażenia regularnego, możesz także spróbować find-lisp-find-dired. To polecenie należy do standardowej biblioteki lib. find-lisp , który jest w całości napisany w elisp, tzn. nie musisz instalować zewnętrznego
findprogramu.
Na przykład poniżej pokazano wszystkie pliki z rozszerzeniem „.el” w katalogu ~ / lisp:
M-x find-lisp-find-dired RET ~/lisp RET \.el\' RET
(Mecz honoruje case-fold-search).
Dzika karta
Warto zauważyć, że od następnej wersji Emacsa (v26.1) Dired obsługuje wilcards w części katalogowej argumentu nazwy pliku. Oznacza to, że następujące prace:
C-x d ~/soft/*/*.c RET
(W dopasowaniu rozróżniana jest wielkość liter).
To polecenie pokazuje w buforze Dired wszystkie pliki z rozszerzeniem „.c”, 2 poziomy głębi w „~ / soft” . Oznacza to, że zostaną wyświetlone wszystkie pliki, takie jak
„~ / soft / foo / bar.c” , ale nie pliki takie jak „~ / soft / qux.c”
ani „~ / soft / foo / baz / qux.c” .
To samo, ale bez rozróżniania wielkości liter:
C-x d ~/soft/*/*.[cC] RET
Premia
Jeśli używasz Dired z literą „ls” zaimplementowaną w elisp, „ls-lisp” lub „eshell-ls”, możesz rekurencyjnie wyświetlić listę wszystkich plików pasujących do znaku wieloznacznego o następującej składni:
C-x d ~/soft/**/*.c RET
Zanotuj '**'. W takim przypadku wyświetlane są wszystkie pliki w polach „ ~ / soft” pasujące do symbolu wieloznacznego, nawet „~ / soft / qux.c” .
Jednak podczas korzystania insert-directory-program
z symboli wieloznacznych rozszerzenie jest dokonywane przez powłokę systemową; oznacza to, że ta rekurencyjna składnia „**” działa tylko, jeśli jest obsługiwana przez powłokę. Na przykład zsh go obsługuje, ale bash nie. W przypadku powłok innych niż zsh poprzednie polecenie zrobi to samo co:
find-dired+.el
zapewnia ulepszoną wersję poleceniafind-name-dired
. Akceptuje opcjonalne argumenty, które określają (1) minimalną i maksymalną głębokość wyszukiwania oraz (2) ścieżki do wykluczenia z wyszukiwania.Odpowiedzi:
Dzika karta
Posługiwać się
aby uzyskać pliki zgodnie z symbolem wieloznacznym.
Przykład
Znajdź wszystkie pliki z sufiksem „org” w katalogu „~ / org /”. Wpisz następujące informacje
i baw się dobrze.
Wyrażenie regularne
Posługiwać się
z odpowiednimi argumentami, aby uzyskać pliki zgodnie z wyrażeniem regularnym.
Przykład
Znajdź wszystkie pliki z sufiksem „org” w katalogu „~ / org /”. Wpisz następujące informacje
i baw się dobrze.
źródło
*org
bez ręcznego wprowadzania gomy-find-orgfiles ()
po „t” i „Q” // można zaznaczyć wszystkie i zastosować? @Marco WahlWyrażenie regularne
Aby użyć wyrażenia regularnego, możesz także spróbować
find-lisp-find-dired
. To polecenie należy do standardowej biblioteki lib. find-lisp , który jest w całości napisany w elisp, tzn. nie musisz instalować zewnętrznegofind
programu.Na przykład poniżej pokazano wszystkie pliki z rozszerzeniem „.el” w katalogu ~ / lisp:
(Mecz honoruje
case-fold-search
).Dzika karta
Warto zauważyć, że od następnej wersji Emacsa (v26.1) Dired obsługuje wilcards w części katalogowej argumentu nazwy pliku. Oznacza to, że następujące prace:
(W dopasowaniu rozróżniana jest wielkość liter).
To polecenie pokazuje w buforze Dired wszystkie pliki z rozszerzeniem „.c”, 2 poziomy głębi w „~ / soft” . Oznacza to, że zostaną wyświetlone wszystkie pliki, takie jak „~ / soft / foo / bar.c” , ale nie pliki takie jak „~ / soft / qux.c” ani „~ / soft / foo / baz / qux.c” .
To samo, ale bez rozróżniania wielkości liter:
Premia
Jeśli używasz Dired z literą „ls” zaimplementowaną w elisp, „ls-lisp” lub „eshell-ls”, możesz rekurencyjnie wyświetlić listę wszystkich plików pasujących do znaku wieloznacznego o następującej składni:
Zanotuj '**'. W takim przypadku wyświetlane są wszystkie pliki w polach „ ~ / soft” pasujące do symbolu wieloznacznego, nawet „~ / soft / qux.c” .
Jednak podczas korzystania
insert-directory-program
z symboli wieloznacznych rozszerzenie jest dokonywane przez powłokę systemową; oznacza to, że ta rekurencyjna składnia „**” działa tylko, jeśli jest obsługiwana przez powłokę. Na przykład zsh go obsługuje, ale bash nie. W przypadku powłok innych niż zsh poprzednie polecenie zrobi to samo co:źródło