Réponses:
lsne fait pas de correspondance de motifs sur les noms de fichiers. Il répertorie simplement le contenu des répertoires et les fichiers qui lui sont fournis comme arguments.
Votre shell, d'autre part, a une fonctionnalité appelée globbing ou génération de nom de fichier qui développe un modèle dans une liste de fichiers correspondant à ce modèle.
Ici, ce modèle glob serait abc*.zip( *étant un caractère générique qui représente n'importe quel nombre de caractères ).
Vous le passeriez à n'importe quelle commande que vous aimez, comme printfpour l'impression:
printf '%s\n' abc*.zip
Vous pouvez également le transmettre à ls -lpour afficher les attributs de ces fichiers:
ls -ld abc*.zip
(nous en avons besoin -dcar si l'un de ces fichiers est de type répertoire , lsil listerait leur contenu autrement).
Ou pour unziples extraire si seulement ils unzippouvaient extraire plus d'un fichier à la fois. Malheureusement, ce n'est pas le cas, vous devez donc utiliser xargs -n1soit une forboucle:
printf '%s\0' abc*.zip | xargs -r0n1 unzip
Ou:
for file in abc*.zip; do unzip "$file"; done
Mais en fait, unzipétant plus comme un port d'une commande MS-DOS, unziplui-même traiterait son argument comme un glob. En d'autres termes, unzip 'abc*.zip'ne décompressera pas le fichier appelé abc*.zip(un nom de fichier parfaitement valide sur Unix, pas sur les systèmes d'exploitation Microsoft), mais les fichiers correspondant au abc*.zipmodèle, vous voudrez donc réellement:
unzip 'abc*.zip'
( En fait , notre xargset forapproche ci - dessus serait une erreur, parce que s'il y a un fichier appelé abc*.zippar exemple, unziptraiterait comme un modèle! Voir bsdtarune façon plus unixy pour extraire les ziparchives)
Pour une correspondance insensible à la casse, vous utiliseriez de manière [aA][bB][cC]*.[zZ][iI][pP]portable. Certains shells ont des opérateurs globbing étendus pour une correspondance insensible à la casse:
zsh:
setopt extendedglob
ls -ld (#i)abc*.zip
Ou:
ls -ld ((#i)abc)*.zip
si vous souhaitez que la abcpièce soit insensible à la casse.
ksh93:
ls -ld ~(i)abc*.zip
ou:
ls -ld ~(i:abc)*.zip
avec bash.
shopt -s nocaseglob
ls -ld abc*.zip
(aucun moyen d'y avoir seulement des parties des globes sensibles à la casse autrement qu'en utilisant la syntaxe portable).
avec yash:
set +o case-glob
ls -ld abc*.zip
même remarque que bashci-dessus.
ls abc*.zip
Cependant, cela échouera s'il y a trop de fichiers (il y a une limite à l'expansion du shell en termes de nombre d'arguments vers lesquels il peut s'étendre).
find . -name "abc*.zip"
C'est probablement le plus universel. Les citations doivent être là. Avec certaines findimplémentations, vous pouvez également utiliser -inameau lieu de -namepour la recherche insensible à la casse ( aBc<date>.ZIPcorrespondrait également).
ls | grep -x "abc.*\.zip"
Attention au .*et \.puisque le filtre utilisé par grep est regex qui est différent de la notation générique que le shell utilise pour l'expansion. À utiliser grep -ipour la recherche insensible à la casse.
execve()appel système.
findces fichiers seront également recherchés dans les sous-répertoires. Utilisez find . ! -name . -prune -name 'abc*.zip' -printou find . -maxdepth 1 -name 'abc*.zip'si vos findsupports -maxdepthcomme sur GNU ou BSD ou find . -depth 1 -name 'abc*.zip'si vos findsupports -depth <n>comme sur certains BSD pour restreindre au répertoire courant.
$ ls ../*.atravaillé pour moi (liste des archives dans le répertoire parent).
Vous devez spécifier le répertoire où lsva chercher dans un exemple
ls -la ~/file*.*
ls -la ./file*.*
cela fonctionne pour moi, mais évidemment, il ne prend pas en charge la recherche par modèle
abcet se terminer par .zip.
ls -1 | grep "abc$(your_date).zip"?