Czy istnieje prosty sposób rekurencyjnego wyszukiwania wszystkich plików w hierarchii katalogów, które nie kończą się na liście rozszerzeń? Np. Wszystkie pliki, które nie są * .dll lub * .exe
Znalezienie systemu UNIX / GNU, mimo że potężne, nie wydaje się mieć exclude
trybu (lub go brakuje) i zawsze trudno mi było używać wyrażeń regularnych do znajdowania rzeczy, które nie pasują do określonego wyrażenia .
Jestem w środowisku Windows (korzystam z portu GnuWin32 większości narzędzi GNU), więc jestem równie otwarty na rozwiązania tylko dla Windows.
command-line
find
Cristian Diaconescu
źródło
źródło
-not
można zastąpić'!'
(Cytat jest zalecany). Z drugiej strony-name
rozróżnia małe i wielkie litery, podczas gdy wielkość-iname
liter nie ma znaczenia.źródło
-not
jest złą opcją, ta z!
dobrym działaniem :)Pierwsze dwie opcje dwóch nazw nie mają opcji -print, więc zostały pominięte. Cała reszta jest drukowana.
źródło
Możesz coś zrobić za pomocą polecenia grep:
Zaznaczona
-v
flagagrep
oznacza „znajdź rzeczy, które nie pasują do tego wyrażenia”.źródło
jeszcze jeden :-)
Odwołanie do polecenia Unix find
źródło
źródło
Linux / OS X:
Począwszy od bieżącego katalogu, rekurencyjnie znajdź wszystkie pliki z rozszerzeniem .dll lub .exe
Zaczynając od bieżącego katalogu, rekurencyjnie znajdź wszystkie pliki, które NIE kończą się na .dll lub .exe
Uwagi:
(1) Opcja P w grep wskazuje, że używamy stylu Perla do pisania naszych wyrażeń regularnych do użycia w połączeniu z poleceniem grep . W celu wykonania polecenia grep w połączeniu z wyrażeniami regularnymi uważam, że styl Perla jest najpotężniejszym stylem na świecie.
(2) Opcja v w grep instruuje powłokę, aby wykluczyła dowolny plik, który spełnia wyrażenie regularne
(3) Znak $ na końcu powiedz „.dll $” jest znakiem kontrolnym ogranicznika, który informuje powłokę, że ciąg nazwy pliku kończy się na „.dll”
źródło
Inne rozwiązania na tej stronie nie są pożądane, jeśli masz długą listę rozszerzeń - utrzymywanie długiej sekwencji
-not -name 'this' -not -name 'that' -not -name 'other'
byłoby żmudne i podatne na błędy - lub jeśli wyszukiwanie jest programowe, a lista rozszerzeń jest tworzona w czasie wykonywania.W takich sytuacjach
find
pożądane może być rozwiązanie, które jaśniej oddziela dane (listę rozszerzeń) i kod (parametry do ). Biorąc pod uwagę strukturę katalogu i plików, która wygląda następująco:Możesz zrobić coś takiego:
Co skutkuje w:
Możesz zmienić listę rozszerzeń bez zmiany bloku kodu.
UWAGA nie działa z natywnym OSX
find
- zamiast tego użyj gnu find.źródło