Chciałbym określić lokalizację pliku za pomocą wiersza polecenia. Próbowałem:
find . -type f -name "postgis-2.0.0"
i
locate postgis-2.0.0
bezskutecznie. Jakie jest polecenie określające katalog pliku, pod warunkiem jego nazwy?
command-line
directory
find
Sam007
źródło
źródło
locate
komenda jest w porządku, po prostu zaktualizować locatedb pierwsze, za pomocą poleceniaupdatedb
postgis-2.0.0
już nie być . Zwykle po instalacji za pomocą menedżerów pakietów pliki wykonywalne byłyby w jednym z$PATH
folderów, spróbujwhich postgis
zobaczyć lokalizację. Jeśli nic nie zwraca, tylko powinieneś ręcznie poszukać lokalizacji pliku.Odpowiedzi:
Spróbuj
find ~/ -type f -name "postgis-2.0.0"
zamiast tego.Używanie
.
przeszuka tylko bieżący katalog.~/
przeszuka cały katalog domowy (prawdopodobnie skąd go pobrałeś). Jeśli użyłeśwget
jako root, możliwe, że może być gdzie indziej, więc możesz użyć/
do przeszukiwania całego systemu plików.Powodzenia
źródło
wget
tak, użyłem jako root, więc/
działało dziękiSpróbowałbym:
The. oznacza wyszukiwanie tylko w bieżącym katalogu, najlepiej przeszukać wszystko od roota, jeśli naprawdę nie wiesz. Ponadto typ -f oznacza wyszukiwanie plików, a nie folderów. Dodanie
sudo
pozwala na wyszukiwanie we wszystkich folderach / podfolderach.Twoja składnia
locate
jest poprawna, ale może być konieczne uruchomieniepierwszy. Z jakiegokolwiek powodu nigdy nie mam szczęścia
locate
.locate
korzysta z bazy danych plików i katalogów wykonanych przezupdatedb
. Jeśli więc pobrałeś nowy plik, istnieje większe prawdopodobieństwo, żeupdatedb
nie zaktualizowałeś bazy danych plików i katalogów. Możesz użyćsudo updatedb
przed użyciemlocate
programu narzędziowego.updatedb
zazwyczaj działa raz dziennie na systemach Linux.źródło
find jest jednym z najbardziej użytecznych narzędzi Linux / Unix.
Próbować
find . -type d | grep DIRNAME
źródło
Inne odpowiedzi są dobre, ale stwierdzenie, że pominięcie
Permission denied
instrukcji daje mi jaśniejsze odpowiedzi (pomija się zstderr
powodu nie uruchomieniasudo
):gdzie:
/
można zastąpić katalogiem, od którego chcesz rozpocząć wyszukiwanief
można zastąpić,d
jeśli szukasz katalogu zamiast pliku-iname
można zastąpić,-name
jeśli chcesz, aby wyszukiwanie uwzględniało wielkość liter*
sw szukanej można pominąć, jeśli nie chcesz symboli wieloznacznych w wyszukiwaniuAlternatywą jest:
W ten sposób zwracane są wyniki, jeśli wyszukiwane hasło pasuje gdziekolwiek w pełnej ścieżce pliku, np
/home/postgis-2.0.0/docs/Readme.txt
źródło
-regex
i-iregex
przełączniki do wyszukiwaniaRegular Expressions
, które również mogłyby znaleźć wzmiankę o ścieżce. Sugestia znalezienia dowolnego elementu, który jest plikiem (-type f
),grep
jest wówczas droższa pod względem zasobów.Permission denied
zdarza się, gdy użytkownik nie ma dostępu do plików lub folderów, użyciesudo
przed znalezieniem pozwoli znaleźć wszystkie pliki.-wholename
lub-iwholename
zamiast do potokowania dogrep
.Próbować
find . -name "*file_name*"
gdzie możesz zmienić „.” (zajrzyj do bieżącego katalogu) na „/” (spójrz na cały system) lub „~ /” (zajrzyj do katalogu domowego).
gdzie możesz zmienić „-name” na „-iname”, jeśli nie chcesz rozróżniać wielkości liter.
gdzie możesz zmienić „ nazwa_pliku ” (plik, który może zaczynać się i kończyć czymkolwiek jest) na dokładną nazwę pliku.
źródło
To powinno uprościć lokalizację pliku:
To da ci pełną ścieżkę do pliku
Drzewo wyświetla zawartość katalogów w formacie drzewiastym.
-f
mówi drzewa, aby dać pełną ścieżkę dostępu do pliku. ponieważ nie mamy pojęcia o jego lokalizacji ani o lokalizacji nadrzędnej, dobrze jest wyszukiwać od katalogu głównego systemu plików/
rekurencyjnie w dół. Następnie wysyłamy wyjście do grep, aby podświetlić nasze słowo,postgis-2.0.0
źródło
Chociaż
find
polecenie jest najprostszym sposobem rekurencyjnego przechodzenia przez drzewo katalogów, istnieją inne sposoby, w szczególności dwa języki skryptowe, które są domyślnie dostarczane z Ubuntu, już mają taką możliwość.grzmotnąć
bash
ma bardzo ładnąglobstar
opcję powłoki, która pozwala na rekurencyjne przechodzenie do drzewa katalogów. Wszystko, co musimy zrobić, to sprawdzić, czy element w./**/*
rozwinięciu jest plikiem i czy zawiera pożądany tekst:Perl
Perl ma moduł Find, który pozwala na rekursywne przechodzenie do drzewa katalogów i wykonywanie pod nimi określonych czynności. Za pomocą małego skryptu można przechodzić przez drzewo katalogów, wypychać pliki zawierające żądany ciąg znaków do tablicy, a następnie drukować w następujący sposób:
I jak to działa:
Pyton
Python to kolejny język skryptowy, który jest bardzo szeroko stosowany w świecie Ubuntu. W szczególności posiada
os.walk()
moduł, który pozwala nam wykonać taką samą akcję jak powyżej - przejść drzewo katalogów i uzyskać listę plików zawierających pożądany ciąg.Jako jedno-liniowy można to zrobić w następujący sposób:
Pełny skrypt wyglądałby tak:
źródło
$ find . -type f | grep IMG_20171225_*
Podaje
./03-05--2018/IMG_20171225_200513.jpg
DOT po poleceniu,
find
aby podać punkt początkowy,Stąd - bieżący folder,
„potokowany” (= przefiltrowany) przez filtr nazw
IMG_20171225_*
źródło