Am încercat să creez un șir de comandă find care va găsi toate fișierele care se termină cu un număr 1-99, dar le exclud pe toate celelalte .

de ex Vreau să găsesc myfile1 myfile99 dar nu myfile456 și nu myfilebackup

Regele la care mă gândesc este myfile[1-9]{1,2} dar nu pot face ca acest lucru să funcționeze cu find.

find . -regex ".*myfile[0-9]{1,2}" SAU find . -iname "myfile[0-9]{1,2}"

Din câte văd, este partea {1,2} care nu funcționează.

(apropo puteți utiliza -name -regex interschimbabil?)

Orice ajutor apreciat.

Comentarii

  • -iname (și -name) utilizați globuri , care nu nu aveți această sintaxă.

Răspuns

Ați putea încerca

find . -regex ".*myfile[0-9][0-9]?" 

sau

find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \) 

Comentarii

  • Mulțumesc – prima linie este worki pentru mine. Încercasem acest lucru cu -iname, dar nu ' cred că acceptă sintaxa sau altfel ' fac ceva greșit.

Răspuns

Dacă aveți găsire GNU, puteți utiliza un alt tip de expresie regulată:

find . -regextype sed -regex ".*myfile[0-9]\{1,2\}" 

Conform GNU find folosește un castrat Sintaxa expresiei regulate Emacs în mod implicit – Emacs acceptă sintaxa \{from,to\}, dar cel puțin GNU find nu-l acceptă.

În mod ciudat, manualul de referință nu include o secțiune despre sed sintaxa expresiei regulate, deci cine știe ce părți ale acestuia sunt acceptate.

Comentarii

  • sed ca ed pare a fi un alias pentru posix-basic, deci ar trebui să fie compatibil cu POSIX BRE (deși acceptă unele ex tensiuni precum \+). ' nu este compatibil cu GNU sed unde, de exemplu, [\n] se potrivește cu o linie nouă în loc de bara inversă sau n cerute de POSIX. Vedeți și -regextype posix-extended pentru ERE-urile POSIX (deci .*myfile[0-9]{1,2}), de asemenea, cu extensii precum \s sau \<
  • Nu am știut niciodată despre -regextype. Se pare că, dacă utilizați -regextype egrep, se pare că puteți evita barele oblice.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *