U kunt niet direct bestanden vermelden die alleen in kleine letters eindigen met een enkele opdracht en een basisbestandbollen. Dit is waarom en hoe je er omheen kunt werken:
Waarom het lastig is:
* BASIS GLOBBING: Standaard UNIX -schelpen gebruiken basisbollenpatronen (*,?, [], Enz.). Deze kunnen overeenkomen met een tekens, maar kunnen geen onderscheid maken tussen hoofdletters en kleine letters voor specifieke filtering.
De oplossing:met behulp van `find` en` grep`
U kunt 'vinden' en 'grep' combineren om dit te bereiken. Hier is hoe:
`` `bash
vinden . -type f -print0 | grep -ez '^./[^/]*[a -z] \.? [^/]*$' | xargs -0 ls -l
`` `
Verklaring:
1. `Vind. -type f -print0`:
- `Find .`:begint te zoeken in de huidige map (` .`)
- `-type F`:zoekt alleen naar reguliere bestanden
- `-Print0`:afdrukken gevonden bestanden gescheiden door null-tekens (veiliger voor bestandsnamen met spaties)
2. `grep -ez '^./[^/]*[A -z] \.? [^/]*$'`:
- `grep`:filtert de uitvoer van` find`
- `-e`:maakt uitgebreide reguliere uitdrukkingen mogelijk voor meer flexibiliteit
-`-z`:behandelt input als nul-beëindigde strings
- De reguliere expressie:
- `^./`:Komt overeen met het begin van de lijn, gevolgd door "./" (om relatieve paden te matchen)
- `[^/]*`:komt overeen met tekens behalve "/" (ervoor zorgen dat we nog steeds binnen de bestandsnaam zijn)
- `[A-Z]`:komt overeen met een enkele kleine letterbrief
- `\.? [^/]*`:Komt overeen met een optionele punt (`. ') Gevolgd door tekens behalve"/"
- `$`:komt overeen met het einde van de lijn
3. `xargs -0 ls -l`:
-`xargs -0`:neemt de nul -beëindigde bestandslijst van` grep` en bouwt opdrachtargumenten op
- `ls -l`:geeft de bestanden weer (u kunt dit wijzigen in elke opdracht die u op de gefilterde bestanden wilt uitvoeren)
belangrijke opmerkingen:
* verborgen bestanden: Dit zal verborgen bestanden vinden (beginnend met '.') Die aan de criteria voldoen.
* Casusgevoeligheid: De expansie van uw schaal kan case-gevoelig of ongevoelig zijn.
Laat het me weten als je de zoekopdracht verder wilt verfijnen! |