回答:
lsファイル名のパターンマッチングは行いません。引数として与えられているディレクトリとファイルの内容をリストするだけです。
一方、シェルには、パターンをそのパターンに一致するファイルのリストに展開する、グロビングまたはファイル名生成と呼ばれる機能があります。
ここでは、そのglobパターンはabc*.zip(任意の数の文字*を表すワイルドカードです)です。
printf印刷など、好きなコマンドに渡します。
printf '%s\n' abc*.zip
ls -lこれらのファイルの属性を表示するために渡すこともできます:
ls -ld abc*.zip
(-dこれらのファイルのタイプが、ディレクトリ、lsそうでない場合はその内容を一覧表示します)。
または、一度に複数のファイルunzipしか抽出できない場合にそれらを抽出しunzipます。残念ながらそうではないので、を使用するxargs -n1かforループする必要があります:
printf '%s\0' abc*.zip | xargs -r0n1 unzip
または:
for file in abc*.zip; do unzip "$file"; done
しかし、実際にunzipは、MS-DOSコマンドのポートのようであり、unzipそれ自体が引数をグロブとして扱います。言い換えれば、unzip 'abc*.zip'呼び出されるファイルabc*.zip(Microsoftオペレーティングシステムではなく、Unixでは完全に有効なファイル名)を解凍しませんが、abc*.zipパターンに一致するファイルなので、実際には次のようになります。
unzip 'abc*.zip'
(実際にはxargs、for上記のアプローチは間違っabc*.zipています。たとえば、呼び出されたファイルがある場合、unzipそれをパターンとして扱います。参照してください。bsdtarzipアーカイブを抽出するより一義的な方法は、をして)
大文字と小文字を区別しないマッチングでは、[aA][bB][cC]*.[zZ][iI][pP]移植性のある方法を使用します。一部のシェルには、大文字と小文字を区別しないマッチングのために拡張されたグロビング演算子があります。
zsh:
setopt extendedglob
ls -ld (#i)abc*.zip
または:
ls -ld ((#i)abc)*.zip
あなただけが欲しいなら abc部分大文字と小文字を区別しない場合。
ksh93:
ls -ld ~(i)abc*.zip
または:
ls -ld ~(i:abc)*.zip
とbash。
shopt -s nocaseglob
ls -ld abc*.zip
(移植可能な構文を使用する以外に、グロブの一部で大文字と小文字を区別する方法はありません)。
とyash:
set +o case-glob
ls -ld abc*.zip
bash上記と同じ発言。
ls abc*.zip
ただし、ファイルが多すぎる場合、これは失敗します(展開できる引数の数に関して、シェルの展開には制限があります)。
find . -name "abc*.zip"
これはおそらく最も一般的なものです。引用符がそこになければなりません。一部のfind実装で-inameは-name、大文字と小文字を区別しない検索の代わりにを使用することもできます(aBc<date>.ZIP一致します)。
ls | grep -x "abc.*\.zip"
気.*及び\.フィルタのgrepを使用するための拡張のためにシェルが使用表記ワイルドカードとは異なる正規表現です。grep -i大文字と小文字を区別しない検索に使用します。
execve()システムコールのカーネル制限です。
find、サブディレクトリでもこれらのファイルを探すことに注意してください。使用find . ! -name . -prune -name 'abc*.zip' -printまたはfind . -maxdepth 1 -name 'abc*.zip'あなたの場合はfindサポートは-maxdepthGNUまたはBSD上などfind . -depth 1 -name 'abc*.zip'、あなたの場合はfindサポート-depth <n>いくつかのBSDのような、現在のディレクトリに制限します。
$ ls ../*.a私のために働いた(親ディレクトリにアーカイブをリストする)。
ls -1 | grep "abc$(your_date).zip"?