Znaleźć wszystkie pliki, których nazwa zaczyna się od określonego ciągu?

148

Mam katalog z około 100000 plików i chcę wykonać pewne funkcje na wszystkich plikach zaczynających się od określonego ciągu, który może pasować do dziesiątek tysięcy plików.

próbowałem

ls mystring*

ale zwraca to błąd basha „Za dużo argumentów”. Mój następny plan polegał na użyciu

find ./mystring* -type f

ale to ma ten sam problem.

Kod musi wyglądać mniej więcej tak

for FILE in `find ./mystring* -type f`
do
    #Some function on the file
done
RikSaunderson
źródło
Zamiast forpętli powinieneś podłączyć rurę finddo while.
Wstrzymano do odwołania.

Odpowiedzi:

277

posługiwać się

find . -name 'mystring*'
Sergio Tulentsev
źródło
10
i wykonać jakąś funkcję "find. -name 'mystring *' -exec [polecenie]" na przykład delete "find. -name 'mystring *' -exec rm {} \;"
Eldar
2
Gdzie {} jest symbolem zastępczym nazwy pliku :-) (abyś mógł konstruować własne akcje)
Sergio Tulentsev
1
Wydaje się, że zwraca wszystkie wyniki zawierające ciąg?
Brian Z
7
... lub find . -iname 'mystring*'do wyszukiwania bez rozróżniania wielkości liter.
Frank Nocke
OP odnosi się do pojedynczego katalogu, więc wstaw -maxdepth 1przed, -nameaby ograniczyć znajdowanie do bieżącego folderu
jacanterbury
27
ls | grep "^abc"  

da ci wszystkie pliki zaczynające się (co jest dokładnie wymagane przez OP) od podciągu abc.
Działa tylko w bieżącym katalogu, podczas gdy finddziała rekurencyjnie w podfolderach.

Aby użyć findtylko dla plików zaczynających się od twojego ciągu, spróbuj

odnaleźć . -name 'abc' *

jacanterbury
źródło
4

Jeśli chcesz ograniczyć wyszukiwanie tylko do plików, należy rozważyć użycie -type fw wyszukiwaniu

spróbuj użyć również -inamedo wyszukiwania bez rozróżniania wielkości liter

Przykład:

find /path -iname 'yourstring*' -type f

Możesz także wykonać pewne operacje na wynikach bez znaku potoku lub xargs

Przykład:

Wyszukaj pliki i pokaż ich rozmiar w MB

find /path -iname 'yourstring*' -type f -exec du -sm {} \;
matson kepson
źródło