$LETTERで始まるファイルまたは$LETTER以降のアルファベット文字で始まるファイルを選択してください。

$LETTERで始まるファイルまたは$LETTER以降のアルファベット文字で始まるファイルを選択してください。

ディレクトリに次のファイルが含まれているとします。

  • ファイル1
  • ファイル2
  • bファイル
  • .c ファイル
  • 文書
  • ファイル2
  • qファイル
  • この文書

$LETTERで始まる、または$LETTER以降のアルファベット文字で始まるすべてのファイルを選択する簡単な方法を探しています。 $LETTERで始まるファイルまたは文字で始まるファイルを見つけるために簡単に修正できるソリューションより早いアルファベットの$ LETTERよりも便利です。

たとえば、上記のリストLETTER = cで「cfile、ffile、ffile2、qfile、zfile」を選択したいと思います。

上記の例は単純化された例です。実際、このディレクトリには何千ものファイルが含まれています。結局、ls | tail -n${FUDGE_FACTOR}ファジー要因を手動で見つける方法を使用しましたが、それを自動化する方法を探しています。

私はシェルベースのソリューションを探しています(私はBASHを使用していますが、他のシェルのソリューションも歓迎しています)。私はシェルスクリプトがこれに最適なツールではないかもしれないことを知っていますが、それは純粋に興味のある(シェルスクリプトの詳細については)この質問をするので、python / perl / luaのFAVE_SCRIPTING_LANGUAGE答えに返信しないでください。 /$

このタイプの操作に対するシェルスクリプトの制限に関する一般的な意見と、実際の生活の中でこれらの制限を解決するための最良の方法(つまり、「シェルベースのソリューションでなければならない」という規定なし)が最も歓迎されます。

ありがとう

答え1

実際には本当に簡単です。

echo [$LETTER-z]*

大文字と小文字を区別するには:

echo [$(echo "$LETTER" | tr a-z A-Z)-Z$LETTER-z]*

これはシェルが実行されるために機能します。パラメータ拡張今後パス名拡張(つまり、ワイルドカード)。

答え2

シェルに組み込まれたワイルドカードを使うのはどうですか?

LETTER=c; echo [$LETTER-z]*

これはbashとkshで動作します。

答え3

次のスクリプトを使用できます。

START=c
END=q
ls | egrep ^[$START-$END].*

これにより、cからqまでのすべてのファイルが選択されます。

出力例:

[gbeech@svr01 test]$ echo  ^[$START-$END].*
^[c-q].*
[gbeech@svr01 test]$ ls | egrep ^[$START-$END].*
cfile
ffile
ffile2
qfile

また、正規表現を調整して、grepがほぼすべての操作を実行するように制限するように拡張することもできます。

関連情報