web-dev-qa-db-ja.com

1桁の数字とTXT拡張子で終わるすべてのファイルを返すUnixコマンド

1つの数字で終わり、TXT拡張子を持つすべてのファイルを返しますか。

3
Sai

ファイル(または他の種類のノード)を見つけるための最も基本的なツールの1つは、findユーティリティです。

find ./ -type f -name '*[!0-9][0-9].txt'

これは検索します:

  • ...現在のディレクトリ(./)から再帰的に。 findのほとんどのバージョンのデフォルト値であるため、これを別のパスに変更するか、オフのままにすることもできます。
  • ...ディレクトリ、デバイスノード、シンボリックリンクなどではなくファイルであるアイテムの場合(-type f)。他のタイプも検索したい場合は、これをオフにしておくことができます。
  • ...指定された名前パターンに一致するアイテムの場合。単一引用符を使用してパターンを囲んでいるので、bashまたはシェルは、findがコマンドを取得する前にそれをグロブパターンに展開しないようにしています。スターは任意の数の文字と一致し、ファイルの末尾は数字、数字、そして拡張子以外の何かでなければなりません。 (-name '*[0-9].txt'

名前が数字の後に.txtが続くファイルがある場合、上記のコマンドは数字の前に数字以外の1つを必要とするため、それらのファイルが欠落します。次の同等のコマンドは、ブール演算子を使用して、数字のみのファイル名も含めます(-oは「または」、!は「から」)。

find ./ -type f \( -name '*[!0-9][0-9].txt' -o -name '[0-9].txt' \)
find ./ -type f -name '*[0-9].txt' ! -name '*[0-9][0-9].txt'

これは大文字と小文字が区別されることに注意してください。大文字と小文字を区別しない一致が必要な場合は、-inameの代わりに-nameを使用して、file4.TXTなども一致させることができます。また、ファイルがその拡張子を持つテキストファイルであると主張しているからといって、それがそうではないことにも注意してください。 Linuxでは、名前に関係なく、任意のファイルを任意のタイプにすることができます。他の拡張機能があるテキストファイルまたは拡張機能がないテキストファイルも存在する可能性があります。

8
Caleb

プレーンな古いPOSIXグロブを使用する:

ls -d -- [0-9].txt *[!0-9][0-9].txt
6
dubiousjim

Zshでは、setopt extended_glob~/.zshrcを使用:

print -lr -- *[0-9].txt~*[0-9][0-9].txt

ファイル名が-で始まらず、\を含まない場合は、次のように入力する手間を省くことができます。

print -l *[0-9].txt~*[0-9][0-9].txt

print -lechoに置き換えて、改行ではなくスペースで名前を表示します。 print -lls -dに置き換えて、ls(エイリアスに応じて色付きなど)、またはlsでフォーマットされたファイル名を表示します。ディレクトリです:

ls *[0-9].txt~*[0-9][0-9].txt

サブディレクトリ内のファイルも表示する場合は、パターンの前に**/を追加します。

ls **/*[0-9].txt~*[0-9][0-9].txt

1桁で終わり、拡張子が.txtのファイルを返すUnixコマンド

ls -l *[0-9].txt
1
Ani