Ho provato a creare una stringa di comando find che troverà tutti i file che terminano con un numero 1-99 ma escluderà tutti gli altri .
es Voglio trovare myfile1 myfile99 ma non myfile456 e non myfilebackup
La regex a cui” sto pensando è myfile[1-9]{1,2}
ma non riesco “a farlo funzionare con find.
find . -regex ".*myfile[0-9]{1,2}"
OPPURE find . -iname "myfile[0-9]{1,2}"
Da quello che posso vedere “è la parte {1,2}
che non funziona.
(a proposito puoi usare -name -regex
in modo intercambiabile?)
Qualsiasi aiuto apprezzato.
Commenti
Risposta
Potresti provare
find . -regex ".*myfile[0-9][0-9]?"
o
find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)
Commenti
- Grazie – la prima riga è worki ng per me. Avevo provato con -iname ma non ' penso che supporti la sintassi oppure ' sto facendo qualcosa di sbagliato.
Risposta
Se hai GNU find, puoi usare un altro tipo di espressione regolare:
find . -regextype sed -regex ".*myfile[0-9]\{1,2\}"
Secondo GNU find
utilizza un castrato Sintassi delle espressioni regolari Emacs per impostazione predefinita – Emacs supporta la sintassi \{from,to\}
, ma almeno GNU find
non lo supporta.
Stranamente, il manuale di riferimento non “include una sezione sulla sintassi delle espressioni regolari sed
, quindi chissà quali parti di esso sono supportati.
Commenti
-
sed
comeed
sembra essere un alias perposix-basic
, quindi dovrebbe essere compatibile con POSIX BRE (sebbene supporti alcuni ex tensioni come\+
). ' non è compatibile con GNUsed
dove ad esempio[\n]
corrisponde a una nuova riga invece di la barra rovesciata on
richiesta da POSIX. Vedi anche-regextype posix-extended
per POSIX ERE (quindi.*myfile[0-9]{1,2}
), anche con estensioni come\s
o\<
- Non ho mai saputo di -regextype. Sembra che se utilizzi
-regextype egrep
sembra che tu possa evitare le barre rovesciate.
-iname
(e-name
) utilizzano glob , che non hanno questa sintassi.