Perché è complicato:
* Globing di base: I gusci UNIX standard utilizzano i modelli di base globing (*,?, [], ecc.). Questi possono corrispondere a qualsiasi caso di carattere, ma non possono distinguere tra maiuscolo e minuscolo per il filtro specifico.
La soluzione:usando `find` e` grep`
Puoi combinare `finish` e` grep` per raggiungere questo obiettivo. Ecco come:
`` `Bash
Trovare . -Type F -print0 | grep -ez '^./[^/]*[a -z] \.? [^/]*$' | Xargs -0 ls -l
`` `
Spiegazione:
1. `Trova. -Type f -print0`:
- `Trova .`:Inizia a cercare nella directory corrente (` .`)
- `-type f`:cerca solo file normali
- `-print0`:stampe trovate file separati da caratteri null (più sicuri per nomi di file con spazi)
2. `grep -ez '^./[^/]*[A -z] \.? [^/]*$'`:
- `grep`:filtra l'output di` find`
- `-e`:abilita espressioni regolari estese per una maggiore flessibilità
-`-z`:tratta l'input come stringhe di terminazione null
- l'espressione regolare:
- `^./`:Corrisponde all'inizio della linea, seguito da "./" (per abbinare i percorsi relativi)
- `[^/]*`:abbina qualsiasi personaggio tranne "/" (assicurando che siamo ancora all'interno del nome file)
- `[A-Z]`:abbina una singola lettera minuscola
- `\.? [^/]*`:Corrisponde a un punto opzionale (`.`) seguito da qualche personaggio tranne"/"
- `$`:corrisponde alla fine della linea
3. `xargs -0 ls -l`:
-`xargs -0`:prende l'elenco dei file terminato null da` grep` e build gli argomenti di comando
- `ls -l`:elenca i file (è possibile modificarlo in qualsiasi comando che si desidera eseguire sui file filtrati)
Note importanti:
* File nascosti: Ciò troverà file nascosti (a partire da '.') Che soddisfano i criteri.
* Sensibilità al caso: L'espansione del nome del tuo shell potrebbe essere sensibile al caso e insensibile.
Fammi sapere se vuoi perfezionare ulteriormente la ricerca!
sistemi © www.354353.com