Wyszukiwanie ze locate
znalezieniem ścieżek w systemie plików.
Często znasz a priori, że interesują Cię tylko pliki lub tylko katalogi.
Wyszukiwanie „zlokalizuj” często zwraca wiele wyników. Przydałoby się zawrzeć tylko jeden z typów w wyniku, ponieważ pomaga to skrócić wynik.
Istnieje jednak bardziej interesujący argument, aby pominąć pliki lub katalogi: ponieważ lista ścieżek wyników może być niejednoznaczna - nie tylko w teorii.
Poniższy przykład jest przypadkiem z prawdziwego świata i nie jest niczym niezwykłym:
$ locate --regex --basename "xfce4-keyboard-overlay$"
/usr/local/bin/xfce4-keyboard-overlay
/usr/local/share/xfce4-keyboard-overlay
Ok, znaleźliśmy coś! Ale ... pliki lub katalogi?
$ file /usr/local/bin/xfce4-keyboard-overlay
/usr/local/bin/xfce4-keyboard-overlay: bash script
To jest plik ...
$ file /usr/local/share/xfce4-keyboard-overlay
/usr/local/share/xfce4-keyboard-overlay: directory
podczas gdy drugi nie jest.
Ta dwuznaczność sprawia, że długie listy ścieżek są trudne do odczytania, więc byłoby naprawdę miło odfiltrować katalogi, na przykład używając opcji linii komend dla locate
.
Czy coś takiego istnieje? Nawet jeśli filtr katalogów jest inny niż lokalizacja?
Przynajmniej można użyć skryptu do iteracji wszystkich nazw plików w celu sprawdzenia - co może być powolne.
while
wyciągu?printf
do dowolnych danych .locate
i rozszerzając twój,read
jak sugerowano tutaj transnum.blogspot.ie/2008/11/…źródło
/usr/local/share/xfce4-keyboard-overlay
i każdy jej podkatalog , w twoim przykładzie. Dodawanie-maxdepth 0
pomaga.locate --regex --basename "xfce4-keyboard-overlay$" | xargs -I % sh -c "test -d % && echo %"
xargs
zfind
było dobrym pomysłem, edytowałem je, aby było solidne. Mam nadzieję, że nie masz nic przeciwko.xargs
powtórzy polecenie dla każdej linii, jeśli podasz-L 1
lub-i
parametr.Spójrz tutaj
Wprawdzie jest to kopanie nowej powłoki dla każdego pliku, ale ma tę zaletę, że jest ładne i kompaktowe.
EDYCJA: Nie byłam zadowolona z tej odpowiedzi, ponieważ kopała nową powłokę dla każdego pliku. To powinno mieć tylko dwa procesy:
Oczywiście byłoby miło, gdybyśmy mogli całkowicie uniknąć wyrzucenia tłumacza, ale
xargs
wydaje się, że ma ograniczoną zdolność do łączenia poleceń.źródło
/home/evil/$(reboot)/xfce4-keyboard-overlay
i głupio go uruchomiłem jakoroot
).Moje dwa centy:
Jest to mniej więcej sposób, w jaki G-Man to zrobił w połączeniu z substytucją procesu.
źródło
Co jeśli połączysz
locate
zfile
igrep
? ...źródło
file
dla każdej ścieżki. Pamiętaj, że często jest wiele wierszy wyników dla lokalizacji. Mój obecny test polega na wyszukiwaniu „gnome”, podając około 73000 ścieżek do przetestowania.$f
plik tofile
program, który otworzy ten plik i odczyta z niego . Jest to rażąco kosztowne, gdy wszystko, co musisz zrobić, tostat()
. ………… To również da nieprawidłowe wyniki dla plików zawierających w nazwach „katalog” (np. „Katalog_telefoniczny”). …………… (Równieżfor f in `…`; do …
składnia nie obsługuje nazw zawierających spacje.)