Linux-znajdowanie plików z nazwą zawierającą ciąg znaków
Szukałem polecenia, które zwróci pliki z bieżącego katalogu, które zawierają łańcuch znaków w nazwie pliku. Widziałem komendy locate
i find
, które mogą znaleźć pliki zaczynające się na coś first_word*
lub kończące się na coś *.jpg
.
Jak Mogę zwrócić listę plików, które zawierają łańcuch znaków w nazwie pliku?
Na przykład, jeśli 2012-06-04-touch-multiple-files-in-linux.markdown
był plikiem w bieżącym katalogu.
Jak Mogę zwrócić ten plik i inne zawierające łańcuch touch
? Za pomocą polecenie takie jak find '/touch/'
6 answers
Użycie find
:
find . -maxdepth 1 -name "*string*" -print
Znajdzie wszystkie pliki w bieżącym katalogu (usuń maxdepth 1
jeśli chcesz, aby był rekurencyjny) zawierające "string" i wydrukuje go na ekranie.
Jeśli chcesz uniknąć pliku zawierającego ':', możesz wpisać:
find . -maxdepth 1 -name "*string*" ! -name "*:*" -print
Jeśli chcesz użyć grep
(ale myślę, że nie jest to konieczne, o ile nie chcesz sprawdzać zawartości pliku) możesz użyć:
ls | grep touch
Ale powtarzam, find
jest lepszym i czystszym rozwiązaniem dla Twojego zadanie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-06 14:33:25
Użyj grep w następujący sposób:
grep -R "touch" .
-R
oznacza rekurencję. Jeśli wolisz nie wchodzić do podkatalogów, pomiń je.
-i
oznacza "ignoruj przypadek". Warto też spróbować.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-04 12:20:50
Opcja -maxdepth
powinna być poprzedzona opcją -name
, Jak Poniżej.,
find . -maxdepth 1 -name "string" -print
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-15 15:02:30
find $HOME -name "hello.c" -print
PrzeszukaÄ ‡ caĹ ' y system $HOME
(tj. /home/username/
) w poszukiwaniu plikĂłw o nazwie "hello.c " i wyświetla ich nazwy ścieżek:
/Users/user/Downloads/hello.c
/Users/user/hello.c
Jednak nie będzie pasował HELLO.C
lub HellO.C
. Aby dopasować wielkość liter, podaj opcję -iname
w następujący sposób:
find $HOME -iname "hello.c" -print
Przykładowe wyjścia:
/Users/user/Downloads/hello.c
/Users/user/Downloads/Y/Hello.C
/Users/user/Downloads/Z/HELLO.c
/Users/user/hello.c
Podaj opcję -type f
, aby wyszukiwać tylko pliki:
find /dir/to/search -type f -iname "fooBar.conf.sample" -print
find $HOME -type f -iname "fooBar.conf.sample" -print
-iname
Działa na GNU lub BSD (włączając w to OS X) polecenie Znajdź wersję. Jeśli Twoja wersja polecenia find nie obsługuje -iname
, wypróbuj następującą składnię używając polecenia grep
:
find $HOME | grep -i "hello.c"
find $HOME -name "*" -print | grep -i "hello.c"
Lub spróbuj
find $HOME -name '[hH][eE][lL][lL][oO].[cC]' -print
Przykładowe wyjścia:
/Users/user/Downloads/Z/HELLO.C
/Users/user/Downloads/Z/HEllO.c
/Users/user/Downloads/hello.c
/Users/user/hello.c
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-10 14:17:40
Jeśli łańcuch jest na początku nazwy, możesz to zrobić
$ compgen -f .bash
.bashrc
.bash_profile
.bash_prompt
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-18 06:16:44
grep -R "somestring" | cut -d ":" -f 1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-18 08:48:46