Próbuję użyć polecenia find w systemie Unix i wiem, jak korzystać z jego podstaw. Na przykład mam cztery foldery, A, B, C i D. W każdym folderze mam plik o nazwie hi.dat
. Aby zajrzeć do wszystkich folderów, zrobiłbym:
find * -name hi.dat
.
Świetny! Ale co teraz, jeśli nie chcę patrzeć na folder D? Czy mogę spróbować czegoś takiego:
find * not D/* -name hi.dat
?
Nie chcę pisać:
find A/* B/* C/* -name ...
ponieważ oczywiście mam więcej niż trzy foldery, które zostały użyte jako przykład.
Dzięki! Amit
extglob
opcja może być już ustawiona. Możesz to sprawdzić, wykonując czynnośćshopt extglob
, jeśli jest napisane „wł.”, Masz ustawione. Jeśli nie, możesz dodać jeshopt -s extglob
do swojego,~/.bashrc
a zostanie ono ustawione po uruchomieniu Bash. Po ustawieniu dowolną z tych metod wystarczy wpisaćfind
polecenie.To byłoby
-prune
- ale jest w tym niewielka sztuczka:-prune
oznacza „nie szukaj dalej na tej ścieżce”, więc potrzebujesz innej gałęzi dla katalogów innych niżD
. (-o
oznacza „lub”.) Aby pominąć także inne ścieżki:źródło
Bardziej ogólnym poleceniem znajdowania jest
Zastrzeżenie :
-path
test może jeszcze nie być przenośny / jest częścią standardu POSIX.Uzasadnienie : w strukturze katalogów jak poniżej
w porównaniu do
wyświetli tylko te pliki, które były rzeczywiście wyszukiwane (jawnie
-print
) i nie pominie plików w podkatalogach o nazwie D (-path
):źródło
Działa pipowanie grep -v,
wygląda wszędzie, ale nie w katalogu multimediów
źródło