Mój system operacyjny i katalog domowy znajdują się na dysku SSD. Przechowuję niektóre duże pliki na dysku twardym, a dowiązanie symboliczne z mojego katalogu domowego na dysk twardy (np. ~ / Video / Films jest dowiązaniem symbolicznym do / mnt / hdd / Films). Mam również wiele prefiksów Wine, z których każdy ma dosdevices / z: symlinked to /.
Tak więc, jeśli użyłem funkcji znajdź bez opcji -L, pominie to wszystko, co jest na dysku twardym. Ale jeśli użyję find z -L, to kończy się w pętli z powodu dowiązania symbolicznego Wine do /.
Czy istnieje jakiś rozsądny sposób rozwiązania tego problemu, aby znaleźć wyszukiwania tam, gdzie chcę? Intuicyjnie chcę coś w stylu „podążaj za dowiązaniami symbolicznymi, chyba że znajdują się w katalogu o nazwie dosdevices”. „Śledź dowiązania symboliczne, które prowadzą do czegoś na dysku twardym” również by działały.
-prune
jest właśnie tym, czego szukałem. Znalazłemfind ~ \( -lname ~ -o -lname ~/\* -o -lname / \) -xtype d
listę wszystkich dowiązań symbolicznych, których nie chcę śledzić; Próbuję teraz znaleźć sposób na użycie tego zapytania do przycinania.find ~ <negative criteria> -prune -o <positive criteria> -print
taka, żefind ~ \( -lname ~ -o -lname ~/\* -o -lname / \) -xtype d -prune -o <whatever it is you want> -print
Aby przeszukać WSZYSTKIE linki, działało to dla mnie:
źródło
Ile masz dowiązań symbolicznych do dysków twardych? Jeśli nie jest to zbyt wiele, jednym rozwiązaniem jest nieużywanie „-L”, przy jednoczesnym wyraźnym określaniu dowiązań symbolicznych, które chcesz śledzić w wierszu polecenia find. Coś jak:
Przeszuka bieżący katalog („.”), A także dowiązanie symboliczne „~ / Videos / Films”, ale nie zejdzie do innych dowiązań symbolicznych.
źródło
Innym rozwiązaniem, które rozwiązuje problem (przynajmniej w moim przypadku), jest użycie montowań powiązań zamiast dowiązań symbolicznych do katalogów na dysku twardym. Odbywa się to poprzez dodanie wpisów w
/etc/fstab
następujący sposób:/mnt/hdd/Films /home/mark/Videos/Films none bind 0 0
źródło