Musím vytvoriť bash skript, ktorý vyhľadá v danom adresári určité prípony súborov. Prípony súborov majú tvar .210 .110 .311 .211 a tak ďalej. Nemôžem urobiť iba ".2 pretože existujú názvy súborov, ktoré majú tento názov v názve. Existuje spôsob, ako nastaviť vyrovnávaciu pamäť po „.2„takže rozšírenie má iba 3 znaky? Týmto sa z vyhľadávania odstránia všetky nesprávne výsledky.
Práve teraz používam find /cygdrive/x/Clients -name "*.210"
Vďaka!
odpovede:
3 pre odpoveď č. 1Mali by ste byť schopní používať zástupné znaky. Pre všetky súbory s trojmiestnou číselnou príponou by malo stačiť nasledujúce.
ls *.[0-9][0-9][0-9]
Ak chcete iba prípony, ktoré začínajú číslom 2
, skúste to:
ls *.2[0-9][0-9]
2 pre odpoveď č. 2
Ak som vašu otázku prečítal správne, stačí v cieľovom adresári spustiť nasledovné:
printf "%sn" *.[0-9][0-9][0-9]
Výstup nebude obsahovať bodkové súbory. Ak ich chcete, môžete povoliť dotglob * bash * možnosť. Bolo by bezpečnejšie povoliť nullglob tiež (pozri komentáre od @ c00kiemon5ter nižšie).
1 pre odpoveď č. 3
môžete používať regulárne výrazy, ak použijete príkaz grep
find /cygdrive/x/Clients | grep ".2dd$"
ale je to oveľa pomalšie ako pri použití zástupných znakov, ako uviedol Kurt S.