Muszę utworzyć skrypt bash, który przeszuka dany katalog w poszukiwaniu określonych rozszerzeń plików. Rozszerzenia plików mają postać .210 .110 .311 .211 i tak dalej. Nie mogę zrobić tylko „.2 ponieważ istnieją nazwy plików, które mają to w nazwie. Czy istnieje sposób ustawienia bufora po „.2”, aby rozszerzenie miało tylko 3 znaki? Spowoduje to usunięcie wszystkich niepoprawnych wyników wyszukiwania.
W tej chwili używam find /cygdrive/x/Clients -name "*.210"
Dzięki!
Odpowiedzi:
3 dla odpowiedzi № 1Powinieneś być w stanie używać symboli wieloznacznych. W przypadku wszystkich plików z 3-cyfrowym rozszerzeniem numerycznym powinny wystarczyć następujące informacje.
ls *.[0-9][0-9][0-9]
Jeśli chcesz tylko rozszerzenia zaczynające się od numeru 2
, Spróbuj tego:
ls *.2[0-9][0-9]
2 dla odpowiedzi nr 2
Jeśli poprawnie odczytam twoje pytanie, wystarczy uruchomić następujące polecenie w katalogu docelowym:
printf "%sn" *.[0-9][0-9][0-9]
Dane wyjściowe nie obejmują pliki kropkowe. Jeśli chcesz, możesz włączyć dotglob Opcja * bash *. Bezpieczniej byłoby włączyć nullglob opcja też (patrz komentarze @ c00kiemon5ter poniżej).
1 dla odpowiedzi nr 3
możesz użyć wyrażeń regularnych, jeśli wpiszesz potok w grep
find /cygdrive/x/Clients | grep ".2dd$"
ale jest to o wiele wolniejsze niż używanie symboli wieloznacznych, o czym wspomniał Kurt S.