Risposte:
lsnon esegue la corrispondenza dei pattern sui nomi dei file. Elenca semplicemente il contenuto delle directory e i file che vengono forniti come argomenti.
D'altra parte, la shell ha una funzione chiamata globbing o generazione del nome file che espande un modello in un elenco di file corrispondenti a quel modello.
Qui sarebbe quel modello glob abc*.zip( *essendo un jolly che sta per qualsiasi numero di caratteri ).
Lo passeresti a qualsiasi comando ti piaccia, ad esempio printfper la stampa:
printf '%s\n' abc*.zip
Potresti anche passarlo a ls -lper visualizzare gli attributi di quei file:
ls -ld abc*.zip
(abbiamo bisogno -dperché se uno di questi file è di tipo directory , lsaltrimenti ne elencherebbe il contenuto).
O per unzipestrarli se solo fosse unzippossibile estrarre più di un file alla volta. Sfortunatamente no, quindi avresti bisogno di usare xargs -n1o un forciclo:
printf '%s\0' abc*.zip | xargs -r0n1 unzip
O:
for file in abc*.zip; do unzip "$file"; done
Ma in effetti, unzipessendo più simile a una porta di un comando MS-DOS, unzipstesso tratterà il suo argomento come un glob. In altre parole, unzip 'abc*.zip'non decomprimerai il file chiamato abc*.zip(un nome file perfettamente valido su Unix, non sui sistemi operativi Microsoft), ma i file che corrispondono al abc*.zipmodello, quindi in realtà vorresti:
unzip 'abc*.zip'
(In realtà il nostro xargse l' forapproccio sopra sarebbe sbagliato, perché se c'è un file chiamato abc*.zipper esempio, unziplo tratterebbe come un modello! Vedere bsdtarper un modo più univoco per estrarre gli ziparchivi)
Per la corrispondenza senza distinzione tra maiuscole e minuscole, utilizzeresti in modo [aA][bB][cC]*.[zZ][iI][pP]portabile. Alcune shell hanno esteso gli operatori di globbing per la corrispondenza insensibile alle maiuscole:
zsh:
setopt extendedglob
ls -ld (#i)abc*.zip
O:
ls -ld ((#i)abc)*.zip
se si desidera solo che la abcparte non faccia distinzione tra maiuscole e minuscole.
ksh93:
ls -ld ~(i)abc*.zip
o:
ls -ld ~(i:abc)*.zip
con bash.
shopt -s nocaseglob
ls -ld abc*.zip
(non c'è modo di avere solo parti del case globs sensibili lì se non usando la sintassi portatile).
con yash:
set +o case-glob
ls -ld abc*.zip
stessa osservazione di cui bashsopra.
ls abc*.zip
Questo, tuttavia, non riuscirà se ci sono troppi file (esiste un limite all'espansione della shell in termini di quanti argomenti può espandersi).
find . -name "abc*.zip"
Questo è probabilmente il più universale. Le virgolette devono essere lì. Con alcune findimplementazioni, è anche possibile utilizzare -inameanziché la -namericerca senza distinzione tra maiuscole e minuscole ( aBc<date>.ZIPcorrisponderebbe anche).
ls | grep -x "abc.*\.zip"
Tenete presente che .*e \.poiché il filtro utilizzato da grep è regex, che è diverso dalla notazione jolly che la shell utilizza per l'espansione. Utilizzare grep -iper la ricerca senza distinzione tra maiuscole e minuscole.
execve()chiamata di sistema.
findcercherà quei file anche nelle sottodirectory. Usa find . ! -name . -prune -name 'abc*.zip' -printo find . -maxdepth 1 -name 'abc*.zip'se i tuoi findsupporti -maxdepthgradiscono su GNU o BSD o find . -depth 1 -name 'abc*.zip'se findsupportano -depth <n>simili su alcuni BSD per limitarti alla directory corrente.
$ ls ../*.aha funzionato per me (elenca gli archivi nella directory principale).
È necessario specificare la directory in cui lscercare in un esempio
ls -la ~/file*.*
ls -la ./file*.*
funziona per me, ma ovviamente non supporta la ricerca per modello
abce terminare con .zip.
ls -1 | grep "abc$(your_date).zip"?