2010-10-27 34 views
64

Mam katalog zawierający około 100 000 plików i chcę wykonać jakąś funkcję na wszystkich plikach zaczynających się od określonego ciągu, który może pasować dziesiątki tysięcy plików.Znajdź wszystkie pliki o nazwie pliku zaczynające się od określonego ciągu, który może pasować do tysięcy plików

Próbowałem

ls mystring* 

ale to wraca z błędem bash "zbyt wiele argumentów. Mój następny plan polegał na użyciu

find ./mystring* -type f 

, ale ma to ten sam problem.

Kod powinien wyglądać

for FILE in `find ./mystring* -type f` 
do 
    #Some function on the file 
done 

góry dzięki, Rik

+0

Zamiast pętli 'for', powinieneś użyć' find' w 'while'. –

Odpowiedz

126

użytku

find . -name 'mystring*' 
+7

i wykonać jakąś funkcję "znajdź. -name" mystring * '-exec [polecenie] "na przykład usuń" znajdź. -name "mystring *' -exec rm {} \;" – Eldar

+2

Gdzie {} jest symbolem zastępczym dla nazwy pliku :-) (aby można było tworzyć własne działania) –

+1

To wydaje się zwracać wszystkie wyniki * zawierające * ciąg znaków? –

17
ls | grep "^a" 

daje wszystkie pliki rozpoczynające się na literę A i działa tylko na bieżącym katalogu, podczas gdy find przejdzie w sub-direct domyślnie.

Nie twierdzę, że jest lepiej - tylko pod innym kątem.

Powiązane problemy