開始パターンと終了パターンを持つファイルのリスト

開始パターンと終了パターンを持つファイルのリスト

「abc」で始まり、「.zip」で終わるディレクトリ内のすべてのファイルを一覧表示したいと思います。

を使用しようとしていますls

このディレクトリには、abc<date>で始まる多くのzipファイルがありますxvz<date>。私は次のリストを取得したいと思いますabc<date>.zip

ベストアンサー1

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

ただし、実際にはunzipMS-DOS コマンドのポートに近いです。 MS-DOS コマンドunzip自体は引数を glob として扱います。つまり、名前付きファイル(Microsoftオペレーティングシステムのファイル名ではなくUnixの完全に有効なファイル名)はunzip 'abc*.zip'解凍されませんが、パターンと一致するファイルなので、実際に欲しいものは次のとおりです。abc*.zipabc*.zip

 unzip 'abc*.zip'

(実際に上記のxargsアプローチは間違っています。たとえば、for呼び出されたファイルがある場合はパターンとして処理されるためです!アーカイブを抽出するよりユニークな方法については、参照してください。)abc*.zipunzipbsdtarzip


大文字と小文字を区別しない一致に²ポータブルを使用できます[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
    

    (移植可能な構文を使用する以外に、globの一部のみを大文字と小文字を区別するようにする方法はありません。)

  • そしてyash

    set +o case-glob
    ls -ld abc*.zip
    

    上記と同じbashコメントです。


-I PATTERN¹ // --ignore=PATTERNGNU--hide=PATTERNによって実装された非標準拡張を考慮したくない場合ls

² ただし、埋め込まれた複数のシェルでパターンがファイルとbash一致しない場合は、そのままコマンドに渡され、文字通り名前付き[aA][bB][cC]*.[zZ][iI][pP]ファイルが抽出されます。 Bashでこのオプションを設定すると、failglobこの問題を回避できます。

おすすめ記事